malloc()
谁能解释在 C 中使用和calloc()
用于动态内存分配有什么区别?
问问题
5556 次
6 回答
5
尝试这样做:使用 malloc 分配一些内存
char* pszKuchBhi ;
pszKuchBhi = malloc(10) ;
printf( "%s\n", pszKuchBhi ) ;
// Will give some junk values as the memory allocated is not initialized and
// was storing some garbage values
现在在用 calloc 替换 malloc 时做同样的事情。看到不同。
char* pszKuchBhi ;
pszKuchBhi = calloc( 10, 1 ) ;
printf( "%s\n", pszKuchBhi ) ;
//Will print nothing as the memory is initialized to 0
calloc 分配的内存被初始化为 0。它对初学者初始化内存很有好处,但性能方面 calloc 很慢,因为它必须先分配然后再初始化。为了更好地澄清,您始终可以搜索相同的问题,但更好地体验它以了解内部情况。您还可以密切关注您的记忆,亲自查看。
于 2012-08-23T11:34:45.030 回答
0
malloc
返回具有固定字节数的分配。此内存未清除(垃圾值)。
calloc
返回特定内存的固定数量对象的分配。此内存归零。
于 2012-08-23T08:55:01.623 回答
0
分配 100 字节的内存,初始化为 0。
char *ptr = calloc(100, sizeof(char));
如果我们使用 malloc(),那么
char *ptr = malloc(100);
int i = 0;
for(i=0; i< 100; i++)
ptr[i] = 0;
分配内存后,如果初始化发生得更好,我们可以立即使用malloc()
. 不必初始化为0,然后用数据初始化。
于 2012-08-23T09:02:24.800 回答
0
如果要分配 100 个 int。你必须这样做:
int *var;
var = malloc(100 * sizeof(int));
// OR
var = calloc(100, sizeof(int));
因为malloc
在参数中需要多个字节,而calloc
需要一个数字和一个元素,所以它自己进行计算,并用零填充所有分配的内存。
于 2012-08-23T09:04:30.300 回答
0
当您使用 malloc 分配内存时,内存只是分配有垃圾值,而当您使用 calloc 分配内存时,内存被分配并且每个内存位置都填充为 0。
于 2012-08-23T09:07:47.627 回答
0
一个是原始malloc()
函数 ( ),另一个是更方便的函数 ( calloc()
)。从本质上讲,您可以考虑calloc()
这样实现:
void * my_calloc(size_t num_elems, size_t elem_size)
{
const size_t bytes = num_elems * elem_size;
void *p;
if((p = malloc(bytes)) != NULL)
{
memset(p, 0, bytes);
}
return p;
}
于 2012-08-23T09:56:29.583 回答