Changes in libcfa/src/heap.cfa [03b87140:a3ade94]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/heap.cfa
r03b87140 ra3ade94 1233 1233 // Attempt to reuse existing storage. 1234 1234 HeapManager.Storage.Header * header = headerAddr( oaddr ); 1235 bool isFakeHeader = header->kind.fake.alignment & 1 == 1; // old fake header ? 1236 if ( unlikely ( ( isFakeHeader && 1235 if ( unlikely ( ( header->kind.fake.alignment & 1 == 1 && // old fake header ? 1237 1236 (uintptr_t)oaddr % nalign == 0 && // lucky match ? 1238 1237 header->kind.fake.alignment <= nalign && // ok to leave LSB at 1 1239 1238 nalign <= 128 ) // not too much alignment storage wasted ? 1240 || ( (!isFakeHeader) &&// old real header ( aligned on libAlign ) ?1239 || ( header->kind.fake.alignment & 1 != 1 && // old real header ( aligned on libAlign ) ? 1241 1240 nalign == libAlign() ) ) ) { // new alignment also on libAlign 1242 1241 … … 1247 1246 1248 1247 if ( size <= odsize && odsize <= size * 2 ) { // allow 50% wasted data storage 1249 if ( isFakeHeader ) { 1250 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1251 } 1248 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1252 1249 1253 1250 header->kind.real.blockSize &= -2; // turn off 0 fill … … 1290 1287 1291 1288 // Attempt to reuse existing storage. 1292 bool isFakeHeader = header->kind.fake.alignment & 1 == 1; // old fake header ? 1293 if ( unlikely ( ( isFakeHeader && 1289 if ( unlikely ( ( header->kind.fake.alignment & 1 == 1 && // old fake header ? 1294 1290 (uintptr_t)oaddr % nalign == 0 && // lucky match ? 1295 1291 header->kind.fake.alignment <= nalign && // ok to leave LSB at 1 1296 1292 nalign <= 128 ) // not too much alignment storage wasted ? 1297 || ( (!isFakeHeader) &&// old real header ( aligned on libAlign ) ?1293 || ( header->kind.fake.alignment & 1 != 1 && // old real header ( aligned on libAlign ) ? 1298 1294 nalign == libAlign() ) ) ) { // new alignment also on libAlign 1299 1295 1300 if ( isFakeHeader ) { 1301 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1302 } 1296 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1303 1297 return realloc( oaddr, size ); 1304 1298
Note: See TracChangeset
for help on using the changeset viewer.