gpt4 book ai didi

c - calloc 和 malloc + memset 完全一样吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:12 30 4
gpt4 key购买 nike

在 linux 中,calloc 是否与 malloc + memset 完全相同,还是取决于确切的 linux/内核版本?

我特别感兴趣的问题是,您是否可以调用比您实际拥有的更多的 RAM(因为您当然可以 malloc 比您实际拥有的更多的 RAM,只是不能写入)。换句话说,calloc 是否总是按照规范建议的那样实际写入您已分配的内存。

最佳答案

当然,这取决于实现,但在现代 Linux 上,您可能可以。最简单的方法是尝试一下,但我是根据以下逻辑这么说的。

您可以 malloc 多于您拥有的内存(物理 + 虚拟),因为内核会延迟分配您的内存,直到您实际使用它。我相信这是为了增加您的程序不会因内存限制而失败的可能性,但这不是问题所在。

callocmalloc 相同,但零初始化内存。当你向 Linux 请求一页内存时,Linux 已经对它进行了零初始化。因此,如果 calloc 可以判断它请求的内存只是从内核请求的,那么它实际上不必对它进行零初始化!因为它没有,所以无法访问该内存,因此它应该能够请求比实际更多的内存。

如评论中所述this answer提供了很好的解释。

关于c - calloc 和 malloc + memset 完全一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751706/

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