Changeset 425
- Timestamp:
- 04/12/06 16:49:00 (3 years ago)
- Files:
-
- trunk/src/dmdrt/memory.d (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/dmdrt/memory.d
r411 r425 35 35 private 36 36 { 37 extern (C) void* gc_malloc( size_t sz );38 extern (C) void* gc_calloc( size_t nm, size_t sz);39 extern (C) void* gc_realloc( void* p, size_t sz );37 extern (C) void* gc_malloc( size_t sz, bool df = false ); 38 extern (C) void* gc_calloc( size_t sz, bool df = false ); 39 extern (C) void* gc_realloc( void* p, size_t sz, bool df = false ); 40 40 extern (C) void gc_free( void* p ); 41 41 42 42 extern (C) size_t gc_sizeOf( void* p ); 43 43 extern (C) size_t gc_capacityOf( void* p ); 44 45 alias void function( void *p, void *dummy ) gc_finalizer;46 extern (C) void gc_setFinalizer( void *p, gc_finalizer fn );47 44 48 45 extern (C) void onOutOfMemory(); … … 67 64 else 68 65 { 69 p = gc_malloc(ci.init.length );66 p = gc_malloc(ci.init.length, true); 70 67 debug printf(" p = %p\n", p); 71 gc_setFinalizer(p, &new_finalizer);72 68 } 73 69 … … 123 119 if (c.deallocator) 124 120 { 125 _d_callfinalizer(*p);121 cr_finalize(*p); 126 122 fp_t fp = cast(fp_t)c.deallocator; 127 123 (*fp)(*p); // call deallocator … … 238 234 } 239 235 240 void new_finalizer(void *p, void *dummy) 241 { 242 //printf("new_finalizer(p = %p)\n", p); 243 _d_callfinalizer(p); 244 } 245 246 extern (C) 247 void _d_callfinalizer(void *p) 248 { 249 //printf("_d_callfinalizer(p = %p)\n", p); 236 237 extern (C) void cr_finalize(void* p, bool det = true) 238 { 239 //printf("cr_finalize(p = %p)\n", p); 250 240 if (p) // not necessary if called from gc 251 241 { … … 343 333 else 344 334 { 345 newdata = cast(byte *)gc_calloc(newsize + 1 , 1);335 newdata = cast(byte *)gc_calloc(newsize + 1); 346 336 } 347 337 } … … 392 382 else 393 383 { 394 newdata = cast(byte *)gc_calloc(newsize + 1 , 1);384 newdata = cast(byte *)gc_calloc(newsize + 1); 395 385 } 396 386 } … … 498 488 { 499 489 /* 500 * Better version by davejf:490 * Better version by Dave Fladebo: 501 491 * This uses an inverse logorithmic algorithm to pre-allocate a bit more 502 492 * space for larger arrays.
