相关疑难解决方法(0)

malloc和calloc之间的区别?

做的有什么区别:

ptr = (char **) malloc (MAXELEMS * sizeof(char *));
Run Code Online (Sandbox Code Playgroud)

要么:

ptr = (char **) calloc (MAXELEMS, sizeof(char*));
Run Code Online (Sandbox Code Playgroud)

什么时候使用calloc而不是malloc是一个好主意,反之亦然?

c malloc calloc

743
推荐指数
13
解决办法
51万
查看次数

为什么malloc + memset比calloc慢?

众所周知,它与初始化分配的内存calloc不同malloc.使用时calloc,内存设置为零.使用时malloc,内存不会被清除.

所以在日常工作中,我认为callocmalloc+ memset.顺便说一下,为了好玩,我为基准编写了以下代码.

结果令人困惑.

代码1:

#include<stdio.h>
#include<stdlib.h>
#define BLOCK_SIZE 1024*1024*256
int main()
{
        int i=0;
        char *buf[10];
        while(i<10)
        {
                buf[i] = (char*)calloc(1,BLOCK_SIZE);
                i++;
        }
}
Run Code Online (Sandbox Code Playgroud)

代码1的输出:

time ./a.out  
**real 0m0.287s**  
user 0m0.095s  
sys 0m0.192s  
Run Code Online (Sandbox Code Playgroud)

代码2:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLOCK_SIZE 1024*1024*256
int main()
{
        int i=0;
        char *buf[10];
        while(i<10)
        {
                buf[i] = (char*)malloc(BLOCK_SIZE);
                memset(buf[i],'\0',BLOCK_SIZE);
                i++;
        }
}
Run Code Online (Sandbox Code Playgroud)

代码2的输出:

time ./a.out   
**real 0m2.693s**  
user 0m0.973s  
sys 0m1.721s  
Run Code Online (Sandbox Code Playgroud)

更换 …

c malloc

249
推荐指数
2
解决办法
5万
查看次数

C/C++ - 当我为单个int分配空间时,为什么堆如此之大?

我目前正在使用gdb来查看低级代码的效果.现在我正在做以下事情:

int* pointer = (int*)calloc(1, sizeof(int));
Run Code Online (Sandbox Code Playgroud)

然而,当我info proc mappings在gdb中检查内存时,我看到以下内容之后,我认为是.text部分(因为Objfile显示了我正在调试的二进制文件的名称):

...
Start Addr    End Addr    Size     Offset    Objfile
0x602000      0x623000    0x21000  0x0       [heap]
Run Code Online (Sandbox Code Playgroud)

当我所做的只是为一个int分配空间时,堆是怎么回事?

最奇怪的是,即使我正在做calloc(1000, sizeof(int))堆的大小仍然是相同的.

PS:我在x86_64机器上运行Ubuntu 14.04.我正在使用g ++编译源代码(是的,我知道我不应该在C++中使用calloc,这只是一个测试).

c c++ heap gdb

8
推荐指数
1
解决办法
671
查看次数

标签 统计

c ×3

malloc ×2

c++ ×1

calloc ×1

gdb ×1

heap ×1