首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BoehmGC -了解内存分配器GC_malloc

BoehmGC -了解内存分配器GC_malloc
EN

Stack Overflow用户
提问于 2011-09-07 18:33:02
回答 2查看 573关注 0票数 1

在理解BoehmGC分配方案-- GC_malloc时,我的头都要碎了。我不明白它是如何分配内存的,也看不到任何GC_malloc内部调用的malloc或mmap。

有没有人能帮帮我?任何链接或代码片段都会有很大的帮助。

首先,非常感谢你。Boehm GC source code

代码语言:javascript
复制
 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 }
EN

回答 2

Stack Overflow用户

发布于 2011-09-07 18:48:45

有两种可能性:

  • ,它返回一个由GENERAL_MALLOC (两次返回)给出的指针,

  • ,它设置了op = *opp (包含EXPECT的那一行),然后返回op。我会说第二个是重用释放的块。

对于第二种情况:在if之前查看opp的值

代码语言:javascript
复制
opp = (void **)&(GC_objfreelist[lg]);

opp中,有一个指向“空闲”对象列表的指针。

if可能会检查该列表中是否有任何块。如果没有(== 0),则使用GENERAL_MALLOC

票数 0
EN

Stack Overflow用户

发布于 2011-09-07 18:53:44

(请参阅各种GC_unix_get_mem(bytes)函数。)

如果未使用mmap,则另一个(裸)分配器使用sbrk

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7332412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档