Leopold Toetsch wrote:
> Appended is a test program that shows timings (i386 w rdtsc) and
> the limit, where malloc changes strategy to use mmap and returns
> zeroed memory.

I don't know if it helps, but there are the results on my machine,
using Windows XP Pro and Cygwin 1.3.10 and GCC 2.95.3:

# gcc -o chkm chkm.c -O3 && ./chkm
    size    1.mal    2.mal    3.mal   memset clean
       1     8500     1188      932        0 0
       2     8908      932      892      664 **
       4     6828      904      928      276 **
       8     6828      904      936      276 **
      16    10520      968      928      612 **
      32     8796      908      912      840 **
      64     8092      988      916      892 **
     128     7584     1032      936      932 **
     256     6328     1052      936     1088 **
     512     6952     1236      940     1096 **
    1024    81784     1408      944     1912 **
    2048    55984     1108      944     3940 **
    4096    53812    13592     1044     7928 **
    8192    51976    15932      980    28880 **
   16384    56988    15520      996    70516 **
   32768    60780    16584      952   159332 **
   65536    60876    16580     1104   356616 **
  131072    62492    16440      964   748300 **
  262144    68668    17628      996  1545984 **
  524288    69152    17604      924  3272504 **
 1048576    74324    38948      992  6678812 **
 2097152    86604    38012     1052 14211056 **
 4194304   106172    40908     1060 458976804 **
 8388608   147276    74432     1144 56008064 **

# gcc -o chkm chkm.c malloc.c -O3 && ./chkm
    size    1.mal    2.mal    3.mal   memset clean
       1     7104      300      204        0 0
       2     3964      188      180        0 0
       4     3304      188      180        0 0
       8     3264      256      172        0 0
      16     6508      164      180        0 0
      32     2112      388      168     1500 **
      64     3496      260      192      904 **
     128     3268      208      296     1304 **
     256     3276      392      272     1232 **
     512     1924      492      196     1344 **
    1024     2664    78572      268     1676 **
    2048     3036    31248      116     3420 **
    4096    63312    14524      144     6588 **
    8192    54508    15632      116    26584 **
   16384    52724    14888      172    73844 **
   32768    58336    14632      164   165624 **
   65536    57680    14344      164   421396 **
  131072    58164    15748      236   757964 **
  262144   249528    49220    49836        0 0
  524288   160816    72180    53728        0 0
 1048576   173212    71464    66964        0 0
 2097152   214488    95112    98340        0 0
 4194304   296548   171728   161160        0 0
 8388608   405532   283444   291892        0 0

to compile with Visual C++ I had to change the rdtscl macro to:

    #define rdtscl(low) \
        { \
            _asm    rdtsc \
            _asm    mov dword ptr [low], eax \
        }

the low word seems to be in eax instead of edx, don't know why.
and these are the results:

# cl -nologo -o chkm_vc.exe chkm_vc.c && chkm_vc
chkm_vc.c
    size    1.mal    2.mal    3.mal   memset clean
       1     2288      668      352        0 0
       2     5068      456      348      176 **
       4     2040      552      304      260 **
       8     1936      380      280      172 **
      16     2864      368      296      172 **
      32     1408      756      328      172 **
      64     1360      408      308      188 **
     128     1260      500      376      228 **
     256     1276      828      396      292 **
     512     1424      400      304      568 **
    1024     3936     1080      420     1168 **
    2048    39664      432      388     4492 **
    4096    49412    12760      420     7684 **
    8192    42512    15484      524    15476 **
   16384    67436    26780      544    75100 **
   32768    43680    25584      532   167956 **
   65536    46392    26052   125328   359224 **
  131072    57456    26324    27228   788760 **
  262144    52196   116656    26800  1598200 **
  524288    58720    29900    17500        0 0
 1048576    26504    16048    15168        0 0
 2097152    38564    27296    15904        0 0
 4194304    34008    27608    15804        0 0
 8388608    40480    24464    25492        0 0

the results are apparently the same with -Ox (maximum opts).
 
cheers,
Aldo

__END__
$_=q,just perl,,s, , another ,,s,$, hacker,,print;

Reply via email to