【发布时间】:2021-05-10 06:11:54
【问题描述】:
malloc() 分配单个内存块,而 calloc() 分配 多块内存,每块大小相同。
它们在内部实现方面有何不同?
我尝试了下面的代码并试图找出 malloc 和 calloc 的内部实现之间的区别(考虑到上面引用的文本)。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p=(int*)malloc(2*sizeof(int));
p[0]=3;
p[1]=4;
printf("%d\t%d",p[0],p[1]);
free(p);
int *q=(int*)calloc(2,sizeof(int));
q[0]=1;
q[1]=2;
printf("\n%d\t%d",q[0],q[1]);
free(q);
return 0;
}
但我没有发现这两个函数之间有任何区别(从输出)。 我应该做些什么改变来理解这两个功能的内部实现? 在上面引用的文本中提到了我对内部实现的含义。
希望你能得到我的问题。
谢谢
【问题讨论】:
-
引用是 API 定义的差异,不一定是内部实现 - malloc 接受字节作为大小,而 calloc 接受元素数量和元素大小(以字节为单位)。事实上,除了处理
calloc的大小和内存归零的一小部分外,任何实现很可能两者在很大程度上是相同的。