c - malloc 返回内存或虚拟地址空间

标签 c windows linux memory

malloc是在堆上分配一 block 内存还是应该叫虚拟地址空间?

我是在挑剔地称它为虚拟地址空间,还是这只是 DOS 的遗留问题? Linux 怎么样?

编辑:

许多答案都非常详细,但没有一个能回答我的问题。

最佳答案

malloc 在堆上分配内存,期间。

您的 C 库通常保留可用内存块的列表(或一些更复杂的数据结构),找到合适的 block 来满足 malloc(可能将较大的 block 拆分为多个较小的 block ) 并将 free 的内存返回到列表中(可能将几个较小的 block 合并成一个更大的 block )

当列表不包含足够大的 block 来满足您的malloc时,库将向操作系统请求更多内存,例如使用 sbrk系统调用。此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为程序员,您不能(也不需要)知道这一点。

malloc 分配虚拟地址空间而不是堆上的 block 就像说 read 从硬盘读取而不是从文件读取一样:这是无关紧要的从调用者的角度来看,并不总是正确的。

关于c - malloc 返回内存或虚拟地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728077/

相关文章:

shell脚本中的Linux子串(剪切)输出

java - 如何使用 sudo 在 Java 中保留 GTK 外观

c - 从指针生成整数而不进行强制转换

c++ - 默认情况下,GCC 4.3.3 中如何处理 C++ 风格的注释?

c - 我应该 IUnknown::Release 使用 DllGetClassObject 创建的接口(interface)吗

Windows cmd 命令列出所有文件、文件夹和子文件夹以及完整路径和所有者名称

linux - 使用 bash 脚本存储 git 命令的输出并通过电子邮件发送

c# - 如何在 C# 中映射双 C 结构指针?

c - 我已经定义了这个结构,但是当我编译代码时,出现以下错误 - 声明与 "Fileheader *pFileheader"不兼容

python - 如何检查 Windows 上所有已安装的 Python 版本?