malloc & calloc

4

根据:

calloc(20, sizeof(int))
malloc(20 * sizeof(int))

这将为20个整数分配内存。

malloc()calloc()分配的是虚拟空间还是物理连续空间?


我认为你的意思是“连续的”。 - davmac
3个回答

9

C语言并不确定计算机是否具有物理地址和虚拟地址空间。

你所知道的只是你获得了指针,并且你可以使用语言的运算符以连续的方式进行索引/取消引用。

如果这样做需要硬件重新映射虚拟地址到物理地址,或者发送电子邮件给某个人,对方回复该地址位置的内容,则是由实现定义的。


5
无论物理上是否连续,取决于您正在开发的平台、MMU和操作系统...但在虚拟上,空间始终是连续的。无论是 calloc 还是 malloc 都没有区别。

0

两者都将分配连续的虚拟内存。现在假设您正在运行一个使用页面作为虚拟内存管理的系统。前十个单词可能被分配在一页框的末尾,而最后十个单词将被分配在另一页框的开头。物理页分配取决于内核,而不是{m|c}alloc()实现。这些只会通过系统调用(请参见brk()mmap())请求更多内存。因为物理页框的分配不一定是连续的,所以您最终会发现分配的一部分落在一个页面中,而落入另一个页面中。

在大多数情况下,您只需要不必担心数据是否跨越页面边界,除非您正在寻找优化并希望避免过多的次要页面故障。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接