首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >malloc和calloc

malloc和calloc
EN

Stack Overflow用户
提问于 2013-01-14 18:40:13
回答 3查看 316关注 0票数 4

如所述:

代码语言:javascript
复制
calloc(20, sizeof(int))
malloc(20 * sizeof(int))

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

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

EN

回答 3

Stack Overflow用户

发布于 2013-01-14 18:43:04

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

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

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

票数 9
EN

Stack Overflow用户

发布于 2013-01-14 18:42:01

空间在物理上是否连续取决于您正在开发的平台、MMU和OS……

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

无论是calloc还是malloc都不会有区别。

票数 5
EN

Stack Overflow用户

发布于 2013-01-14 19:43:35

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14316863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档