4

按照:

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

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

malloc()&是否calloc()分配虚拟或物理连续空间?

4

3 回答 3

9

C 并没有说机器既有物理地址空间又有虚拟地址空间。

您所知道的就是您获得了指针,并且您可以按照语言的运算符定义的连续方式对它们进行索引/取消引用。

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

于 2013-01-14T10:43:03.717 回答
5

空间是否在物理上是连续的,取决于您正在开发的平台、MMU 和操作系统......

实际上它将是连续的,永远。

无论是 calloc 还是 malloc 都不会产生影响。

于 2013-01-14T10:42:01.153 回答
0

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

在大多数情况下,您不必担心数据是否会跨越页面边界,除非您正在寻找优化并且想要避免过多的次要页面错误。

于 2013-01-14T11:43:35.330 回答