这是关于malloc()和calloc()的正确吗?

Ash*_*gra 2 c memory pointers memory-management dynamic-memory-allocation

我已经研究了所有可能的方法,但是我很难消化malloc ie malloc(sizeof(10)) 和calloc都calloc(2,sizeof(5))分配相同的连续内存这一事实,忽略了calloc初始化为零并且比malloc工作相对慢的其他事实.所以这就是我的想法.

我认为在32位系统上,如果我们调用malloc并说malloc(sizeof(10))当时malloc将进入堆并分配12个字节的内存,因为对于32位系统,内存包以4个字节为一组排列,以便分配10个在最后一个块中填充2个字节需要3个字节.

类似地,如果我们调用calloc并说calloc(2,sizeof(5))它将分配2个块,每个块大小为8个字节,总共16个字节,因为由于相同的原因,内存在4个字节的包中,并且分配5个字节,两个4个字节的块是在一个块中使用,将提供3个字节的填充.

所以这就是我对malloc和calloc的看法.我可能是对或错但请告诉我.

ilk*_*chu 6

calloc为每个大小为字节的nmemb元素数组分配"内存"(Linux手册页),但我们知道C中的数组不能在数组元素之间有填充,它们必须在内存中是连续的.在另一方面,分配" 大小字节",所以无论是中还是会给你的10个字节.mallocmalloc(10)calloc(2,5)

现在,幕后发生的是另一个问题,C库可能会决定分配12,16或42个字节.但你不能也不能指望这一点.如果你要求10个字节,假设你有10个字节.

malloc(sizeof(10))它是不同的,它占用int的内存大小(因为10int),并分配那么多.