【发布时间】:2011-09-07 10:33:02
【问题描述】:
我在理解 BoehmGC 分配方案 - GC_malloc 时大吃一惊。我不知道它是如何分配内存的,也没有看到GC_malloc 内部调用的任何 malloc 或 mmap。
有人可以帮助我吗?任何链接或代码 sn-p 都会有很大帮助。
提前非常感谢。 Boehm GC source code
enter code here
254 /* Allocate lb bytes of composite (pointerful) data */
255 #ifdef THREAD_LOCAL_ALLOC
256 void * GC_core_malloc(size_t lb)
257 #else
258 void * GC_malloc(size_t lb)
259 #endif
260 {
261 void *op;
262 void **opp;
263 size_t lg;
264 DCL_LOCK_STATE;
265
266 if(SMALL_OBJ(lb)) {
267 lg = GC_size_map[lb];
268 opp = (void **)&(GC_objfreelist[lg]);
269 LOCK();
270 if( EXPECT((op = *opp) == 0, 0) ) {
271 UNLOCK();
272 return(GENERAL_MALLOC((word)lb, NORMAL));
273 }
274 /* See above comment on signals. */
275 GC_ASSERT(0 == obj_link(op)
276 || (word)obj_link(op)
277 <= (word)GC_greatest_plausible_heap_addr
278 && (word)obj_link(op)
279 >= (word)GC_least_plausible_heap_addr);
280 *opp = obj_link(op);
281 obj_link(op) = 0;
282 GC_bytes_allocd += GRANULES_TO_BYTES(lg);
283 UNLOCK();
284 return op;
285 } else {
286 return(GENERAL_MALLOC(lb, NORMAL));
287 }
288 }
【问题讨论】:
-
GENERAL_MALLOC扩展为什么?你能通过预处理器运行它并再看一遍吗? -
@Kerrek SB:在 GCC 中使用 -dM 选项?
-
在 GCC 中,您可以使用
-E查看预处理器输出:gcc -E myfile.c | less-- 您将获得大量输出,请查看接近尾声。 -
我们的目标,不支持 -E 让我在交叉编译器中检查它。
-
@Kerrek SB:它正在扩展到 GC_debug_malloc(4, "prog2.c", 9);谢谢,让我试着追踪一下。