首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glibc calloc实现的解释,即public_cALLOc( )

glibc calloc实现的解释,即public_cALLOc( )
EN

Stack Overflow用户
提问于 2011-11-15 13:25:17
回答 1查看 936关注 0票数 1

在calloc() (准确地说,是public_cALLOc())实现的glibcmalloc.c中,当它试图以两种方式从内存中抽出0时,如果字节数大于36,那么立即调用memset(),否则它将具体地放置0,如下所示:

glibc-2.13/malloc/malloc.c

代码语言:javascript
复制
void * public_cALLOc()
{
 .....
 int_malloc();
 ...
 ...
 /* Unroll clear of <= 36 bytes (72 if 8byte sizes).  We know that
 contents have an odd number of INTERNAL_SIZE_T-sized words;
 minimally 3.  */
 ...

if (nclears > 9)
    MALLOC_ZERO(d, clearsize);   /* this is nothing but memset(d,0,clearsize) */
else {
    *(d+0) = 0;
    *(d+1) = 0;
    if (nclears > 4) {
      *(d+2) = 0;
      *(d+3) = 0;
      if (nclears > 6) {
         *(d+4) = 0;
         *(d+5) = 0;
      if (nclears > 8) {
     *(d+6) = 0;
         *(d+7) = 0;
     *(d+8) = 0; 
        }
       }
      }     
  ---------------------------------

问题是,为什么我们不直接为所有人做memset (),这一区别的必要性是什么。

谢谢,卡皮尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-15 13:29:02

这是表演技巧。当执行"raw“写操作时,它保存一个函数调用的速度要快于此。

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

https://stackoverflow.com/questions/8137011

复制
相关文章

相似问题

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