176 void* tmalloc_large(mstate m, size_t nb); |
176 void* tmalloc_large(mstate m, size_t nb); |
177 void* tmalloc_small(mstate m, size_t nb); |
177 void* tmalloc_small(mstate m, size_t nb); |
178 /*MACROS converted functions*/ |
178 /*MACROS converted functions*/ |
179 static inline void unlink_first_small_chunk(mstate M,mchunkptr B,mchunkptr P,bindex_t& I); |
179 static inline void unlink_first_small_chunk(mstate M,mchunkptr B,mchunkptr P,bindex_t& I); |
180 static inline void insert_small_chunk(mstate M,mchunkptr P, size_t S); |
180 static inline void insert_small_chunk(mstate M,mchunkptr P, size_t S); |
181 static inline void insert_chunk(mstate M,mchunkptr P,size_t S); |
181 static inline void insert_chunk(mstate M,mchunkptr P,size_t S,size_t NPAGES); |
182 static inline void unlink_large_chunk(mstate M,tchunkptr X); |
182 static inline void unlink_large_chunk(mstate M,tchunkptr X); |
183 static inline void unlink_small_chunk(mstate M, mchunkptr P,size_t S); |
183 static inline void unlink_small_chunk(mstate M, mchunkptr P,size_t S); |
184 static inline void unlink_chunk(mstate M, mchunkptr P, size_t S); |
184 static inline void unlink_chunk(mstate M, mchunkptr P, size_t S); |
185 static inline void compute_tree_index(size_t S, bindex_t& I); |
185 static inline void compute_tree_index(size_t S, bindex_t& I); |
186 static inline void insert_large_chunk(mstate M,tchunkptr X,size_t S); |
186 static inline void insert_large_chunk(mstate M,tchunkptr X,size_t S,size_t NPAGES); |
187 static inline void replace_dv(mstate M, mchunkptr P, size_t S); |
187 static inline void replace_dv(mstate M, mchunkptr P, size_t S); |
188 static inline void compute_bit2idx(binmap_t X,bindex_t& I); |
188 static inline void compute_bit2idx(binmap_t X,bindex_t& I); |
189 /*MACROS converted functions*/ |
189 /*MACROS converted functions*/ |
190 TAny* SetBrk(TInt32 aDelta); |
190 TAny* SetBrk(TInt32 aDelta); |
191 void* internal_realloc(mstate m, void* oldmem, size_t bytes); |
191 void* internal_realloc(mstate m, void* oldmem, size_t bytes); |
245 void paged_init(unsigned pagepower); |
245 void paged_init(unsigned pagepower); |
246 void* paged_allocate(unsigned size); |
246 void* paged_allocate(unsigned size); |
247 void paged_free(void* p); |
247 void paged_free(void* p); |
248 void* paged_reallocate(void* p, unsigned size); |
248 void* paged_reallocate(void* p, unsigned size); |
249 pagecell* paged_descriptor(const void* p) const ; |
249 pagecell* paged_descriptor(const void* p) const ; |
250 private: |
250 |
|
251 /* Dl heap log dump functions*/ |
|
252 #ifdef OOM_LOGGING |
|
253 void dump_heap_logs(size_t fail_size); |
|
254 void dump_dl_free_chunks(); |
|
255 void dump_large_chunk(mstate m, tchunkptr t); |
|
256 size_t iUnmappedChunkSize; |
|
257 #endif |
|
258 private: |
|
259 /* Dubug checks for chunk page support*/ |
|
260 #ifdef DL_CHUNK_MEM_DEBUG |
|
261 #define do_chunk_page_release_check(p, psize, fm, mem_released) debug_chunk_page_release_check(p, psize, fm, mem_released) |
|
262 #define do_check_large_chunk_access(p, psize) debug_check_large_chunk_access(p, psize) |
|
263 #define do_check_small_chunk_access(p, psize) debug_check_small_chunk_access(p, psize) |
|
264 #define do_check_any_chunk_access(p, psize) debug_check_any_chunk_access(p, psize) |
|
265 void debug_check_large_chunk_access(tchunkptr p, size_t psize); |
|
266 void debug_check_small_chunk_access(mchunkptr p, size_t psize); |
|
267 void debug_check_any_chunk_access(mchunkptr p, size_t psize); |
|
268 void debug_chunk_page_release_check(mchunkptr p, size_t psize, mstate fm, int mem_released); |
|
269 #else |
|
270 #define do_chunk_page_release_check(p, psize, fm, mem_released) |
|
271 #define do_check_large_chunk_access(p, psize) |
|
272 #define do_check_small_chunk_access(p, psize) |
|
273 #define do_check_any_chunk_access(p, psize) |
|
274 #endif |
|
275 |
|
276 /* Chunk page release mechanism support */ |
|
277 TInt map_chunk_pages(tchunkptr p, size_t psize); |
|
278 TInt unmap_chunk_pages(tchunkptr p, size_t psize, size_t prev_npages); |
|
279 TInt map_chunk_pages_partial(tchunkptr tp, size_t psize, tchunkptr r, size_t rsize); |
|
280 TInt sys_trim_partial(mstate m, mchunkptr prev, size_t psize, size_t prev_npages); |
|
281 size_t free_chunk_threshold; |
|
282 |
251 // paged allocator structures |
283 // paged allocator structures |
252 enum {npagecells=4}; |
284 enum {npagecells=4}; |
253 pagecell pagelist[npagecells]; // descriptors for page-aligned large allocations |
285 pagecell pagelist[npagecells]; // descriptors for page-aligned large allocations |
254 /** |
286 /** |
255 *always keep this variable at the bottom of the class as its used as |
287 *always keep this variable at the bottom of the class as its used as |