YLUG第67回カーネル読書会

glibc(たぶん2.x)のmallocのお話。→ 革命の日々! カーネル読書会で講演してきました

kosaki氏は細かいところまで広く深く知っていて、設計者&実装者の代弁者たりえているところがすばらしい。
内容は、
K&Rmalloc(約20行)は割と偉大
・fragmentation低減とalloc/freeコストの削減のため、20行が5000行に
・dlmallocにad-hocなチューンをしまくった改造車みたいな感じ
・余ったビットを余すところなく使っていてソースが読みづらい
・「普通の」用途というものはない
・特定用途向けには自分でmmapした方がよい
・defaultでは128KB(131072バイト)まではarena(管理領域)を使用し、128KB以上だと直接mmapされる

で、話を聞いている最中にLinuxWindowsで試してみたのだが、よくわからなかったのでやり直してみた。
(1)2^n - 4、2^n、2^n、2^n + 1で確保
(2)2^n×4で確保
(3)2^n - 64KB - mで確保(Windowsでの境界を調べるため)


static size_t nPrev = 0;
static char *pPrev = NULL;
static void Malloc(int nSize)
{
char *p = (char *)malloc( nSize );
if (pPrev) {
printf( "size %d, ptr: %p, diff: %d, header: %d\n",
nPrev, pPrev, p - pPrev, p - pPrev - nPrev );
}
nPrev = nSize;
pPrev = p;
}

int main(int argc, char* argv[])
{
int i;
Malloc(1);
for ( i = 3; i < 24; ++i ) {
Malloc( (1 << i) - 4 );
printf( "2^%d ±1\n", i );
Malloc( 1 << i );
Malloc( 1 << i );
Malloc( (1 << i) + 1 );
}
Malloc(1);
pPrev = NULL;
printf( "\n" );

for ( i = 1; i < 26; ++i ) {
Malloc( 1 << i );
printf( "2^%d\n", i );
Malloc( 1 << i );
Malloc( 1 << i );
Malloc( 1 << i );
}
Malloc(1);
pPrev = NULL;
printf( "\n" );

for ( i = 18; i < 22; ++i ) {
Malloc( (1 << i) - 65536 - 30 );
printf( "2^%d\n", i );
Malloc( (1 << i) - 65536 - 30 );
Malloc( (1 << i) - 65536 - 30 );
Malloc( (1 << i) - 65536 - 30 );
Malloc( (1 << i) - 65536 - 32 );
Malloc( (1 << i) - 65536 - 32 );
Malloc( (1 << i) - 65536 - 32 );
Malloc( (1 << i) - 65536 - 32 );
}
}

Debian Linux(2.6.15-1)glibc 2.0の結果。
・最小割り当てサイズは12
・割り当て中の管理領域は4バイト
・arenaだと0x8xxxxxxx、直接mmapだと0xbxxxxxxx(推測)
・130KB前後の割り当ては、1回目はarenaから取られるが、2回目以降はmmap
size: 1, ptr: 0x804a008, diff: 16, header: 15
2^3 ±1
size: 4, ptr: 0x804a018, diff: 16, header: 12
size: 8, ptr: 0x804a028, diff: 16, header: 8
size: 8, ptr: 0x804a038, diff: 16, header: 8
size: 9, ptr: 0x804a048, diff: 16, header: 7
2^4 ±1
size: 12, ptr: 0x804a058, diff: 16, header: 4
size: 16, ptr: 0x804a068, diff: 24, header: 8
size: 16, ptr: 0x804a080, diff: 24, header: 8
size: 17, ptr: 0x804a098, diff: 24, header: 7
2^5 ±1
size: 28, ptr: 0x804a0b0, diff: 32, header: 4
size: 32, ptr: 0x804a0d0, diff: 40, header: 8
size: 32, ptr: 0x804a0f8, diff: 40, header: 8
size: 33, ptr: 0x804a120, diff: 40, header: 7
2^6 ±1
size: 60, ptr: 0x804a148, diff: 64, header: 4
size: 64, ptr: 0x804a188, diff: 72, header: 8
size: 64, ptr: 0x804a1d0, diff: 72, header: 8
size: 65, ptr: 0x804a218, diff: 72, header: 7
2^7 ±1
size: 124, ptr: 0x804a260, diff: 128, header: 4
size: 128, ptr: 0x804a2e0, diff: 136, header: 8
size: 128, ptr: 0x804a368, diff: 136, header: 8
size: 129, ptr: 0x804a3f0, diff: 136, header: 7
2^8 ±1
size: 252, ptr: 0x804a478, diff: 256, header: 4
size: 256, ptr: 0x804a578, diff: 264, header: 8
size: 256, ptr: 0x804a680, diff: 264, header: 8
size: 257, ptr: 0x804a788, diff: 264, header: 7
2^9 ±1
size: 508, ptr: 0x804a890, diff: 512, header: 4
size: 512, ptr: 0x804aa90, diff: 520, header: 8
size: 512, ptr: 0x804ac98, diff: 520, header: 8
size: 513, ptr: 0x804aea0, diff: 520, header: 7
2^10 ±1
size: 1020, ptr: 0x804b0a8, diff: 1024, header: 4
size: 1024, ptr: 0x804b4a8, diff: 1032, header: 8
size: 1024, ptr: 0x804b8b0, diff: 1032, header: 8
size: 1025, ptr: 0x804bcb8, diff: 1032, header: 7
2^11 ±1
size: 2044, ptr: 0x804c0c0, diff: 2048, header: 4
size: 2048, ptr: 0x804c8c0, diff: 2056, header: 8
size: 2048, ptr: 0x804d0c8, diff: 2056, header: 8
size: 2049, ptr: 0x804d8d0, diff: 2056, header: 7
2^12 ±1
size: 4092, ptr: 0x804e0d8, diff: 4096, header: 4
size: 4096, ptr: 0x804f0d8, diff: 4104, header: 8
size: 4096, ptr: 0x80500e0, diff: 4104, header: 8
size: 4097, ptr: 0x80510e8, diff: 4104, header: 7
2^13 ±1
size: 8188, ptr: 0x80520f0, diff: 8192, header: 4
size: 8192, ptr: 0x80540f0, diff: 8200, header: 8
size: 8192, ptr: 0x80560f8, diff: 8200, header: 8
size: 8193, ptr: 0x8058100, diff: 8200, header: 7
2^14 ±1
size: 16380, ptr: 0x805a108, diff: 16384, header: 4
size: 16384, ptr: 0x805e108, diff: 16392, header: 8
size: 16384, ptr: 0x8062110, diff: 16392, header: 8
size: 16385, ptr: 0x8066118, diff: 16392, header: 7
2^15 ±1
size: 32764, ptr: 0x806a120, diff: 32768, header: 4
size: 32768, ptr: 0x8072120, diff: 32776, header: 8
size: 32768, ptr: 0x807a128, diff: 32776, header: 8
size: 32769, ptr: 0x8082130, diff: 32776, header: 7
2^16 ±1
size: 65532, ptr: 0x808a138, diff: 65536, header: 4
size: 65536, ptr: 0x809a138, diff: 65544, header: 8
size: 65536, ptr: 0x80aa140, diff: 65544, header: 8
size: 65537, ptr: 0x80ba148, diff: 65544, header: 7
2^17 ±1
size: 131068, ptr: 0x80ca150, diff: -1345536328, header: -1345667396
size: 131072, ptr: 0xb7d96008, diff: -135168, header: -266240
size: 131072, ptr: 0xb7d75008, diff: -135168, header: -266240
size: 131073, ptr: 0xb7d54008, diff: -266240, header: -397313
2^18 ±1
size: 262140, ptr: 0xb7d13008, diff: -266240, header: -528380
size: 262144, ptr: 0xb7cd2008, diff: -266240, header: -528384
size: 262144, ptr: 0xb7c91008, diff: -266240, header: -528384
size: 262145, ptr: 0xb7c50008, diff: -528384, header: -790529
2^19 ±1
size: 524284, ptr: 0xb7bcf008, diff: -528384, header: -1052668
size: 524288, ptr: 0xb7b4e008, diff: -528384, header: -1052672
size: 524288, ptr: 0xb7acd008, diff: -528384, header: -1052672
size: 524289, ptr: 0xb7a4c008, diff: -1052672, header: -1576961
2^20 ±1
size: 1048572, ptr: 0xb794b008, diff: -1052672, header: -2101244
size: 1048576, ptr: 0xb784a008, diff: -1052672, header: -2101248
size: 1048576, ptr: 0xb7749008, diff: -1052672, header: -2101248
size: 1048577, ptr: 0xb7648008, diff: -2101248, header: -3149825
2^21 ±1
size: 2097148, ptr: 0xb7447008, diff: -2101248, header: -4198396
size: 2097152, ptr: 0xb7246008, diff: -2101248, header: -4198400
size: 2097152, ptr: 0xb7045008, diff: -2101248, header: -4198400
size: 2097153, ptr: 0xb6e44008, diff: -4198400, header: -6295553
2^22 ±1
size: 4194300, ptr: 0xb6a43008, diff: -4198400, header: -8392700
size: 4194304, ptr: 0xb6642008, diff: -4198400, header: -8392704
size: 4194304, ptr: 0xb6241008, diff: -4198400, header: -8392704
size: 4194305, ptr: 0xb5e40008, diff: -8392704, header: -12587009
2^23 ±1
size: 8388604, ptr: 0xb563f008, diff: -8392704, header: -16781308
size: 8388608, ptr: 0xb4e3e008, diff: -8392704, header: -16781312
size: 8388608, ptr: 0xb463d008, diff: -8392704, header: -16781312
size: 8388609, ptr: 0xb3e3c008, diff: 1412096328, header: 1403707719

2^1
size: 2, ptr: 0x80ea160, diff: 16, header: 14
size: 2, ptr: 0x80ea170, diff: 16, header: 14
size: 2, ptr: 0x80ea180, diff: 16, header: 14
size: 2, ptr: 0x80ea190, diff: 16, header: 14
2^2
size: 4, ptr: 0x80ea1a0, diff: 16, header: 12
size: 4, ptr: 0x80ea1b0, diff: 16, header: 12
size: 4, ptr: 0x80ea1c0, diff: 16, header: 12
size: 4, ptr: 0x80ea1d0, diff: 16, header: 12
2^3
size: 8, ptr: 0x80ea1e0, diff: 16, header: 8
size: 8, ptr: 0x80ea1f0, diff: 16, header: 8
size: 8, ptr: 0x80ea200, diff: 16, header: 8
size: 8, ptr: 0x80ea210, diff: 16, header: 8
2^4
size: 16, ptr: 0x80ea220, diff: 24, header: 8
size: 16, ptr: 0x80ea238, diff: 24, header: 8
size: 16, ptr: 0x80ea250, diff: 24, header: 8
size: 16, ptr: 0x80ea268, diff: 24, header: 8
2^5
size: 32, ptr: 0x80ea280, diff: 40, header: 8
size: 32, ptr: 0x80ea2a8, diff: 40, header: 8
size: 32, ptr: 0x80ea2d0, diff: 40, header: 8
size: 32, ptr: 0x80ea2f8, diff: 40, header: 8
2^6
size: 64, ptr: 0x80ea320, diff: 72, header: 8
size: 64, ptr: 0x80ea368, diff: 72, header: 8
size: 64, ptr: 0x80ea3b0, diff: 72, header: 8
size: 64, ptr: 0x80ea3f8, diff: 72, header: 8
2^7
size: 128, ptr: 0x80ea440, diff: 136, header: 8
size: 128, ptr: 0x80ea4c8, diff: 136, header: 8
size: 128, ptr: 0x80ea550, diff: 136, header: 8
size: 128, ptr: 0x80ea5d8, diff: 136, header: 8
2^8
size: 256, ptr: 0x80ea660, diff: 264, header: 8
size: 256, ptr: 0x80ea768, diff: 264, header: 8
size: 256, ptr: 0x80ea870, diff: 264, header: 8
size: 256, ptr: 0x80ea978, diff: 264, header: 8
2^9
size: 512, ptr: 0x80eaa80, diff: 520, header: 8
size: 512, ptr: 0x80eac88, diff: 520, header: 8
size: 512, ptr: 0x80eae90, diff: 520, header: 8
size: 512, ptr: 0x80eb098, diff: 520, header: 8
2^10
size: 1024, ptr: 0x80eb2a0, diff: 1032, header: 8
size: 1024, ptr: 0x80eb6a8, diff: 1032, header: 8
size: 1024, ptr: 0x80ebab0, diff: 1032, header: 8
size: 1024, ptr: 0x80ebeb8, diff: 1032, header: 8
2^11
size: 2048, ptr: 0x80ec2c0, diff: 2056, header: 8
size: 2048, ptr: 0x80ecac8, diff: 2056, header: 8
size: 2048, ptr: 0x80ed2d0, diff: 2056, header: 8
size: 2048, ptr: 0x80edad8, diff: 2056, header: 8
2^12
size: 4096, ptr: 0x80ee2e0, diff: 4104, header: 8
size: 4096, ptr: 0x80ef2e8, diff: 4104, header: 8
size: 4096, ptr: 0x80f02f0, diff: 4104, header: 8
size: 4096, ptr: 0x80f12f8, diff: 4104, header: 8
2^13
size: 8192, ptr: 0x80f2300, diff: 8200, header: 8
size: 8192, ptr: 0x80f4308, diff: 8200, header: 8
size: 8192, ptr: 0x80f6310, diff: 8200, header: 8
size: 8192, ptr: 0x80f8318, diff: 8200, header: 8
2^14
size: 16384, ptr: 0x80fa320, diff: 16392, header: 8
size: 16384, ptr: 0x80fe328, diff: 16392, header: 8
size: 16384, ptr: 0x8102330, diff: 16392, header: 8
size: 16384, ptr: 0x8106338, diff: 16392, header: 8
2^15
size: 32768, ptr: 0x810a340, diff: 32776, header: 8
size: 32768, ptr: 0x8112348, diff: 32776, header: 8
size: 32768, ptr: 0x811a350, diff: 32776, header: 8
size: 32768, ptr: 0x8122358, diff: 32776, header: 8
2^16
size: 65536, ptr: 0x812a360, diff: 65544, header: 8
size: 65536, ptr: 0x813a368, diff: 65544, header: 8
size: 65536, ptr: 0x814a370, diff: 65544, header: 8
size: 65536, ptr: 0x815a378, diff: 65544, header: 8
2^17
size: 131072, ptr: 0x816a380, diff: -1412756344, header: -1412887416
size: 131072, ptr: 0xb3e1b008, diff: -135168, header: -266240
size: 131072, ptr: 0xb3dfa008, diff: -135168, header: -266240
size: 131072, ptr: 0xb3dd9008, diff: -266240, header: -397312
2^18
size: 262144, ptr: 0xb3d98008, diff: -266240, header: -528384
size: 262144, ptr: 0xb3d57008, diff: -266240, header: -528384
size: 262144, ptr: 0xb3d16008, diff: -266240, header: -528384
size: 262144, ptr: 0xb3cd5008, diff: -528384, header: -790528
2^19
size: 524288, ptr: 0xb3c54008, diff: -528384, header: -1052672
size: 524288, ptr: 0xb3bd3008, diff: -528384, header: -1052672
size: 524288, ptr: 0xb3b52008, diff: -528384, header: -1052672
size: 524288, ptr: 0xb3ad1008, diff: -1052672, header: -1576960
2^20
size: 1048576, ptr: 0xb39d0008, diff: -1052672, header: -2101248
size: 1048576, ptr: 0xb38cf008, diff: -1052672, header: -2101248
size: 1048576, ptr: 0xb37ce008, diff: -1052672, header: -2101248
size: 1048576, ptr: 0xb36cd008, diff: -2101248, header: -3149824
2^21
size: 2097152, ptr: 0xb34cc008, diff: -2101248, header: -4198400
size: 2097152, ptr: 0xb32cb008, diff: -2101248, header: -4198400
size: 2097152, ptr: 0xb30ca008, diff: -2101248, header: -4198400
size: 2097152, ptr: 0xb2ec9008, diff: -4198400, header: -6295552
2^22
size: 4194304, ptr: 0xb2ac8008, diff: -4198400, header: -8392704
size: 4194304, ptr: 0xb26c7008, diff: -4198400, header: -8392704
size: 4194304, ptr: 0xb22c6008, diff: -4198400, header: -8392704
size: 4194304, ptr: 0xb1ec5008, diff: -8392704, header: -12587008
2^23
size: 8388608, ptr: 0xb16c4008, diff: -8392704, header: -16781312
size: 8388608, ptr: 0xb0ec3008, diff: -8392704, header: -16781312
size: 8388608, ptr: 0xb06c2008, diff: -8392704, header: -16781312
size: 8388608, ptr: 0xafec1008, diff: 1479316352, header: 1470927744

Windowsの結果。
・最小割り当てサイズは16
・管理領域は8バイト
・サイズに関わらず、0x0xxxxxxxに割り当てられる
・一定サイズ(512KB?)を超えると64KB単位の割り当てになり、管理領域が32バイトになる模様
size: 1, ptr: 00371C80, diff: 24, header: 23
2^3 ±1
size: 4, ptr: 00371C98, diff: -5440, header: -5444
size: 8, ptr: 00370758, diff: 24, header: 16
size: 8, ptr: 00370770, diff: 24, header: 16
size: 9, ptr: 00370788, diff: 24, header: 15
2^4 ±1
size: 12, ptr: 003707A0, diff: 24, header: 12
size: 16, ptr: 003707B8, diff: 24, header: 8
size: 16, ptr: 003707D0, diff: 24, header: 8
size: 17, ptr: 003707E8, diff: 40, header: 23
2^5 ±1
size: 28, ptr: 00370810, diff: 40, header: 12
size: 32, ptr: 00370838, diff: 40, header: 8
size: 32, ptr: 00370860, diff: 40, header: 8
size: 33, ptr: 00370888, diff: 56, header: 23
2^6 ±1
size: 60, ptr: 003708C0, diff: 72, header: 12
size: 64, ptr: 00370908, diff: 72, header: 8
size: 64, ptr: 00370950, diff: 72, header: 8
size: 65, ptr: 00370998, diff: 88, header: 23
2^7 ±1
size: 124, ptr: 003709F0, diff: 136, header: 12
size: 128, ptr: 00370A78, diff: 136, header: 8
size: 128, ptr: 00370B00, diff: 136, header: 8
size: 129, ptr: 00370B88, diff: 8496, header: 8367
2^8 ±1
size: 252, ptr: 00372CB8, diff: 264, header: 12
size: 256, ptr: 00372DC0, diff: 264, header: 8
size: 256, ptr: 00372EC8, diff: 264, header: 8
size: 257, ptr: 00372FD0, diff: 280, header: 23
2^9 ±1
size: 508, ptr: 003730E8, diff: 520, header: 12
size: 512, ptr: 003732F0, diff: 520, header: 8
size: 512, ptr: 003734F8, diff: 520, header: 8
size: 513, ptr: 00373700, diff: 536, header: 23
2^10 ±1
size: 1020, ptr: 00373918, diff: 1032, header: 12
size: 1024, ptr: 00373D20, diff: 1032, header: 8
size: 1024, ptr: 00374128, diff: 1032, header: 8
size: 1025, ptr: 00374530, diff: 1048, header: 23
2^11 ±1
size: 2044, ptr: 00374948, diff: 2056, header: 12
size: 2048, ptr: 00375150, diff: 2056, header: 8
size: 2048, ptr: 00375958, diff: 2056, header: 8
size: 2049, ptr: 00376160, diff: 2072, header: 23
2^12 ±1
size: 4092, ptr: 00376978, diff: 4104, header: 12
size: 4096, ptr: 00377980, diff: 4104, header: 8
size: 4096, ptr: 00378988, diff: 4104, header: 8
size: 4097, ptr: 00379990, diff: 4120, header: 23
2^13 ±1
size: 8188, ptr: 0037A9A8, diff: 612000, header: 603812
size: 8192, ptr: 00410048, diff: 8200, header: 8
size: 8192, ptr: 00412050, diff: 8200, header: 8
size: 8193, ptr: 00414058, diff: 8216, header: 23
2^14 ±1
size: 16380, ptr: 00416070, diff: 16392, header: 12
size: 16384, ptr: 0041A078, diff: 16392, header: 8
size: 16384, ptr: 0041E080, diff: 16392, header: 8
size: 16385, ptr: 00422088, diff: 16408, header: 23
2^15 ±1
size: 32764, ptr: 004260A0, diff: 32776, header: 12
size: 32768, ptr: 0042E0A8, diff: 32776, header: 8
size: 32768, ptr: 004360B0, diff: 32776, header: 8
size: 32769, ptr: 0043E0B8, diff: 32792, header: 23
2^16 ±1
size: 65532, ptr: 004460D0, diff: 65544, header: 12
size: 65536, ptr: 004560D8, diff: 65544, header: 8
size: 65536, ptr: 004660E0, diff: 65544, header: 8
size: 65537, ptr: 004760E8, diff: 65560, header: 23
2^17 ±1
size: 131068, ptr: 00486100, diff: 131080, header: 12
size: 131072, ptr: 004A6108, diff: 131080, header: 8
size: 131072, ptr: 004C6110, diff: 302904, header: 171832
size: 131073, ptr: 00510048, diff: 131096, header: 23
2^18 ±1
size: 262140, ptr: 00530060, diff: 262152, header: 12
size: 262144, ptr: 00570068, diff: 262152, header: 8
size: 262144, ptr: 005B0070, diff: 262152, header: 8
size: 262145, ptr: 005F0078, diff: 1179560, header: 917415
2^19 ±1
size: 524284, ptr: 00710020, diff: 589824, header: 65540
size: 524288, ptr: 007A0020, diff: 589824, header: 65536
size: 524288, ptr: 00830020, diff: 589824, header: 65536
size: 524289, ptr: 008C0020, diff: 589824, header: 65535
2^20 ±1
size: 1048572, ptr: 00950020, diff: 1114112, header: 65540
size: 1048576, ptr: 00A60020, diff: 1114112, header: 65536
size: 1048576, ptr: 00B70020, diff: 1114112, header: 65536
size: 1048577, ptr: 00C80020, diff: 1114112, header: 65535
2^21 ±1
size: 2097148, ptr: 00D90020, diff: 2162688, header: 65540
size: 2097152, ptr: 00FA0020, diff: 2162688, header: 65536
size: 2097152, ptr: 011B0020, diff: 2162688, header: 65536
size: 2097153, ptr: 013C0020, diff: 2162688, header: 65535
2^22 ±1
size: 4194300, ptr: 015D0020, diff: 4259840, header: 65540
size: 4194304, ptr: 019E0020, diff: 4259840, header: 65536
size: 4194304, ptr: 01DF0020, diff: 4259840, header: 65536
size: 4194305, ptr: 02200020, diff: 4259840, header: 65535
2^23 ±1
size: 8388604, ptr: 02610020, diff: 8454144, header: 65540
size: 8388608, ptr: 02E20020, diff: 8454144, header: 65536
size: 8388608, ptr: 03630020, diff: 8454144, header: 65536
size: 8388609, ptr: 03E40020, diff: -61666304, header: -70054913

2^1
size: 2, ptr: 00370C38, diff: 24, header: 22
size: 2, ptr: 00370C50, diff: 48480, header: 48478
size: 2, ptr: 0037C9B0, diff: 24, header: 22
size: 2, ptr: 0037C9C8, diff: 24, header: 22
2^2
size: 4, ptr: 0037C9E0, diff: 24, header: 20
size: 4, ptr: 0037C9F8, diff: 24, header: 20
size: 4, ptr: 0037CA10, diff: 24, header: 20
size: 4, ptr: 0037CA28, diff: 24, header: 20
2^3
size: 8, ptr: 0037CA40, diff: 24, header: 16
size: 8, ptr: 0037CA58, diff: 24, header: 16
size: 8, ptr: 0037CA70, diff: 24, header: 16
size: 8, ptr: 0037CA88, diff: 24, header: 16
2^4
size: 16, ptr: 0037CAA0, diff: 24, header: 8
size: 16, ptr: 0037CAB8, diff: 24, header: 8
size: 16, ptr: 0037CAD0, diff: 24, header: 8
size: 16, ptr: 0037CAE8, diff: 24, header: 8
2^5
size: 32, ptr: 0037CB00, diff: 40, header: 8
size: 32, ptr: 0037CB28, diff: 40, header: 8
size: 32, ptr: 0037CB50, diff: 40, header: 8
size: 32, ptr: 0037CB78, diff: 40, header: 8
2^6
size: 64, ptr: 0037CBA0, diff: 72, header: 8
size: 64, ptr: 0037CBE8, diff: 72, header: 8
size: 64, ptr: 0037CC30, diff: 72, header: 8
size: 64, ptr: 0037CC78, diff: 72, header: 8
2^7
size: 128, ptr: 0037CCC0, diff: 136, header: 8
size: 128, ptr: 0037CD48, diff: 136, header: 8
size: 128, ptr: 0037CDD0, diff: 136, header: 8
size: 128, ptr: 0037CE58, diff: 136, header: 8
2^8
size: 256, ptr: 0037CEE0, diff: 264, header: 8
size: 256, ptr: 0037CFE8, diff: 264, header: 8
size: 256, ptr: 0037D0F0, diff: 264, header: 8
size: 256, ptr: 0037D1F8, diff: 264, header: 8
2^9
size: 512, ptr: 0037D300, diff: 520, header: 8
size: 512, ptr: 0037D508, diff: 520, header: 8
size: 512, ptr: 0037D710, diff: 520, header: 8
size: 512, ptr: 0037D918, diff: 520, header: 8
2^10
size: 1024, ptr: 0037DB20, diff: 2827632, header: 2826608
size: 1024, ptr: 00630090, diff: 1032, header: 8
size: 1024, ptr: 00630498, diff: 1032, header: 8
size: 1024, ptr: 006308A0, diff: 1032, header: 8
2^11
size: 2048, ptr: 00630CA8, diff: 2056, header: 8
size: 2048, ptr: 006314B0, diff: 2056, header: 8
size: 2048, ptr: 00631CB8, diff: 2056, header: 8
size: 2048, ptr: 006324C0, diff: 2056, header: 8
2^12
size: 4096, ptr: 00632CC8, diff: 4104, header: 8
size: 4096, ptr: 00633CD0, diff: 4104, header: 8
size: 4096, ptr: 00634CD8, diff: -1371072, header: -1375168
size: 4096, ptr: 004E6118, diff: 4104, header: 8
2^13
size: 8192, ptr: 004E7120, diff: 8200, header: 8
size: 8192, ptr: 004E9128, diff: 8200, header: 8
size: 8192, ptr: 004EB130, diff: 8200, header: 8
size: 8192, ptr: 004ED138, diff: 8200, header: 8
2^14
size: 16384, ptr: 004EF140, diff: 16392, header: 8
size: 16384, ptr: 004F3148, diff: 16392, header: 8
size: 16384, ptr: 004F7150, diff: 16392, header: 8
size: 16384, ptr: 004FB158, diff: 16392, header: 8
2^15
size: 32768, ptr: 004FF160, diff: 1272704, header: 1239936
size: 32768, ptr: 00635CE0, diff: 32776, header: 8
size: 32768, ptr: 0063DCE8, diff: 32776, header: 8
size: 32768, ptr: 00645CF0, diff: 32776, header: 8
2^16
size: 65536, ptr: 0064DCF8, diff: 65544, header: 8
size: 65536, ptr: 0065DD00, diff: 65544, header: 8
size: 65536, ptr: 0066DD08, diff: 65544, header: 8
size: 65536, ptr: 0067DD10, diff: 65544, header: 8
2^17
size: 131072, ptr: 0068DD18, diff: 131080, header: 8
size: 131072, ptr: 006ADD20, diff: 131080, header: 8
size: 131072, ptr: 006CDD28, diff: 66593568, header: 66462496
size: 131072, ptr: 04650048, diff: 131080, header: 8
2^18
size: 262144, ptr: 04670050, diff: 262152, header: 8
size: 262144, ptr: 046B0058, diff: 262152, header: 8
size: 262144, ptr: 046F0060, diff: 262152, header: 8
size: 262144, ptr: 04730068, diff: 3276728, header: 3014584
2^19
size: 524288, ptr: 04A50020, diff: 589824, header: 65536
size: 524288, ptr: 04AE0020, diff: 589824, header: 65536
size: 524288, ptr: 04B70020, diff: 589824, header: 65536
size: 524288, ptr: 04C00020, diff: 589824, header: 65536
2^20
size: 1048576, ptr: 04C90020, diff: 1114112, header: 65536
size: 1048576, ptr: 04DA0020, diff: 1114112, header: 65536
size: 1048576, ptr: 04EB0020, diff: 1114112, header: 65536
size: 1048576, ptr: 04FC0020, diff: 1114112, header: 65536
2^21
size: 2097152, ptr: 050D0020, diff: 2162688, header: 65536
size: 2097152, ptr: 052E0020, diff: 2162688, header: 65536
size: 2097152, ptr: 054F0020, diff: 2162688, header: 65536
size: 2097152, ptr: 05700020, diff: 2162688, header: 65536
2^22
size: 4194304, ptr: 05910020, diff: 4259840, header: 65536
size: 4194304, ptr: 05D20020, diff: 4259840, header: 65536
size: 4194304, ptr: 06130020, diff: 4259840, header: 65536
size: 4194304, ptr: 06540020, diff: 4259840, header: 65536
2^23
size: 8388608, ptr: 06950020, diff: 8454144, header: 65536
size: 8388608, ptr: 07160020, diff: 8454144, header: 65536
size: 8388608, ptr: 07970020, diff: 8454144, header: 65536
size: 8388608, ptr: 08180020, diff: -132129016, header: -140517624

2^18
size: 196578, ptr: 04770070, diff: 196600, header: 22
size: 196578, ptr: 047A0068, diff: 196600, header: 22
size: 196578, ptr: 047D0060, diff: 196600, header: 22
size: 196578, ptr: 04800058, diff: 196600, header: 22
size: 196576, ptr: 04830050, diff: 196584, header: 8
size: 196576, ptr: 04860038, diff: 196584, header: 8
size: 196576, ptr: 04890020, diff: 196584, header: 8
size: 196576, ptr: 048C0008, diff: 196584, header: 8
2^19
size: 458722, ptr: 048EFFF0, diff: 458744, header: 22
size: 458722, ptr: 0495FFE8, diff: 458744, header: 22
size: 458722, ptr: 049CFFE0, diff: 66846824, header: 66388102
size: 458722, ptr: 08990048, diff: 458744, header: 22
size: 458720, ptr: 08A00040, diff: 458728, header: 8
size: 458720, ptr: 08A70028, diff: 458728, header: 8
size: 458720, ptr: 08AE0010, diff: 458728, header: 8
size: 458720, ptr: 08B4FFF8, diff: 6553640, header: 6094920
2^20
size: 983010, ptr: 09190020, diff: 1048576, header: 65566
size: 983010, ptr: 09290020, diff: 1048576, header: 65566
size: 983010, ptr: 09390020, diff: 1048576, header: 65566
size: 983010, ptr: 09490020, diff: 1048576, header: 65566
size: 983008, ptr: 09590020, diff: 983040, header: 32
size: 983008, ptr: 09680020, diff: 983040, header: 32
size: 983008, ptr: 09770020, diff: 983040, header: 32
size: 983008, ptr: 09860020, diff: 983040, header: 32
2^21
size: 2031586, ptr: 09950020, diff: 2097152, header: 65566
size: 2031586, ptr: 09B50020, diff: 2097152, header: 65566
size: 2031586, ptr: 09D50020, diff: 2097152, header: 65566
size: 2031586, ptr: 09F50020, diff: 2097152, header: 65566
size: 2031584, ptr: 0A150020, diff: 2031616, header: 32
size: 2031584, ptr: 0A340020, diff: 2031616, header: 32
size: 2031584, ptr: 0A530020, diff: 2031616, header: 32
size: 2031584, ptr: 0A720020, diff: -171581664, header: -173613248