如所述:
calloc(20, sizeof(int))
malloc(20 * sizeof(int))它将为这20个整数分配内存。
malloc() & calloc()分配的是虚拟空间还是物理连续空间?
发布于 2013-01-14 18:43:04
C并没有说机器既有物理地址空间又有虚拟地址空间。
你所知道的就是你得到了指针,并且你可以按照语言运算符的定义,以一种连续的方式索引/取消引用它们。
如果这样做需要硬件将虚拟地址重新映射到物理地址,或者向回复所寻址位置的内容的人发送电子邮件,则由实现定义。
发布于 2013-01-14 18:42:01
空间在物理上是否连续取决于您正在开发的平台、MMU和OS……
实际上,它将是连续的,永远是。
无论是calloc还是malloc都不会有区别。
发布于 2013-01-14 19:43:35
两者都将分配连续的虚拟内存。现在假设您正在运行一个使用分页作为虚拟内存管理的系统。前十个字可以在一个页帧的末尾分配,后十个字将在另一个页帧的开头分配。物理页面分配取决于内核,而不是{m|c}alloc()实现。它们只会通过系统调用请求更多内存(参见brk(),mmap())。因为物理页帧分配不一定是连续的,所以最终会导致分配的一部分落入一个页面,而另一部分落入另一个页面。
在大多数情况下,您不必担心数据是否会跨越页面边界,除非您正在寻找优化,并且希望避免过多的次要页面结果。
https://stackoverflow.com/questions/14316863
复制相似问题