fel*_*lix 1 c linux glibc linux-kernel
在linux中,calloc与malloc + memset完全相同,还是取决于确切的linux /内核版本?
我特别感兴趣的是你是否可以使用比实际更多的内存来调用RAM(因为你可以使用更多RAM来实现内存,你只是无法写入它).换句话说,calloc总是实际写入你已经分配的内存,因为规范建议应该这样做.
当然,这取决于实现,但在现代Linux上,你可能会.最简单的方法是尝试它,但我是基于以下逻辑说的.
你可以malloc拥有的不仅仅是内存(物理+虚拟),因为内核会延迟你的内存分配,直到你实际使用它为止.我相信这是为了增加程序因内存限制而失败的可能性,但这不是问题.
calloc是相同malloc但零初始化内存.当您向Linux请求内存页面时,Linux已将其初始化为零.因此,如果calloc可以告诉它所要求的内存只是从内核请求,它实际上不必将其初始化为零!由于它没有,因此无法访问该内存,因此它应该能够请求比实际更多的内存.
正如评论中所提到的,这个答案提供了一个非常好的解释.