Changeset 3073
- Timestamp:
- 01/07/08 14:34:49 (11 months ago)
- Files:
-
- trunk/lib/common/tango/core/Memory.d (modified) (2 diffs)
- trunk/lib/gc/basic/gc.d (modified) (3 diffs)
- trunk/lib/gc/basic/gcx.d (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/common/tango/core/Memory.d
r2648 r3073 27 27 extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0 ); 28 28 extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ); 29 extern (C) size_t gc_reserve( size_t sz ); 29 30 extern (C) void gc_free( void* p ); 30 31 … … 282 283 283 284 /** 285 * Requests that at least sz bytes of memory be obtained from the operating 286 * system and marked as free. 287 * 288 * Params: 289 * sz = The desired size in bytes. 290 * 291 * Returns: 292 * The actual number of bytes reserved or zero on error. 293 */ 294 static size_t reserve( size_t sz ) 295 { 296 return gc_reserve( sz ); 297 } 298 299 300 /** 284 301 * Deallocates the memory referenced by p. If p is null, no action 285 302 * occurs. If p references memory not originally allocated by this trunk/lib/gc/basic/gc.d
r2865 r3073 26 26 27 27 private import gcx; 28 private import gcstats; 28 29 private import tango.stdc.stdlib; 29 30 … … 125 126 } 126 127 128 extern (C) size_t gc_reserve( size_t sz ) 129 { 130 return _gc.reserve( sz ); 131 } 132 127 133 extern (C) void gc_free( void* p ) 128 134 { … … 143 149 { 144 150 return _gc.query( p ); 151 } 152 153 // NOTE: This routine is experimental. The stats or function name may change 154 // before it is made officially available. 155 extern (C) GCStats gc_stats() 156 { 157 GCStats stats; 158 _gc.getStats(stats); 159 return stats; 145 160 } 146 161 trunk/lib/gc/basic/gcx.d
r3031 r3073 792 792 * 793 793 */ 794 size_t reserve(size_t size) 795 { 796 if (!size) 797 { 798 return 0; 799 } 800 801 if (!thread_needLock()) 802 { 803 return reserveNoSync(size); 804 } 805 else synchronized (gcLock) 806 { 807 return reserveNoSync(size); 808 } 809 } 810 811 812 // 813 // 814 // 815 private size_t reserveNoSync(size_t size) 816 { 817 assert(size != 0); 818 assert(gcx); 819 820 return gcx.reserve(size); 821 } 822 823 824 /** 825 * 826 */ 794 827 void free(void *p) 795 828 { … … 1781 1814 } 1782 1815 return bin; 1816 } 1817 1818 1819 /** 1820 * Allocate a new pool of at least size bytes. 1821 * Sort it into pooltable[]. 1822 * Mark all memory in the pool as B_FREE. 1823 * Return the actual number of bytes reserved or 0 on error. 1824 */ 1825 size_t reserve(size_t size) 1826 { 1827 uint npages = (size + PAGESIZE - 1) / PAGESIZE; 1828 Pool *pool = newPool(npages); 1829 1830 if (!pool || pool.extendPages(npages) == ~0u) 1831 return 0; 1832 return pool.ncommitted * PAGESIZE; 1783 1833 } 1784 1834












