gpt4 book ai didi

c - malloc() 和 calloc() 是否正确?

转载 作者:行者123 更新时间:2023-12-04 09:41:56 26 4
gpt4 key购买 nike

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

我认为在 32 位系统上,如果我们调用 malloc 并说 malloc(sizeof(10)) 那么 malloc 将转到堆并分配 12 字节的内存,因为对于 32 -bit 系统,内存包以 4 字节为一组排列,因此要分配 10 字节,需要 3 个 block ,并在最后一个 block 中填充 2 个字节。

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

所以这就是我对malloc和calloc的看法。我可能是对的也可能是错的,但无论哪种方式请告诉我。

最佳答案

calloc 分配“每个 size 字节的 nmemb 元素数组的内存”(Linux man page),但我们知道数组之间的 arrays in C cannot have padding元素,它们在内存中必须是连续的。另一方面,malloc 分配“size 字节”,因此 malloc(10)calloc(2,5) 会给你那十个字节。

现在,幕后发生的事情是另一个问题,C 库可能决定分配 12、16 或 42 字节。但是您不能也绝不能指望这一点。如果您要求 10 个字节,则假设您得到了 10 个。

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

关于c - malloc() 和 calloc() 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47819667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com