malloc返回的地址是虚拟地址还是分配内存的实际物理地址?
修改
我在某处读到“在某些实现中,调用free()会将内存释放回系统,而在其他实现中,它会被释放回进程”。 “释放回系统”是否意味着内存是实际的物理内存,“释放回进程”意味着它是虚拟内存?
答案 0 :(得分:14)
这是当前流程中有效的地址。它的虚拟地址还是物理地址取决于底层平台。
答案 1 :(得分:3)
C标准中存在实际或虚拟内存的 no 概念,因此问题毫无意义。无论如何,实现都是免费的。
在虚拟内存操作系统中,您几乎肯定会获得虚拟地址。在非虚拟内存操作系统中,您可能不会。
在这两种情况下,您将获得的地址是您可以用于C提供地址的所有常用内容的地址,例如取消引用,释放,重新分配等等。 是您唯一的保证,也是您通常需要关注的唯一事项。
如果愿意,可以免费为您提供顺序ID列表(1,2,3,...),前提是所有预期的操作仍然按照宣传的方式工作。当然,在目前的体系结构中可能效率不高,但它仍然可行。
答案 2 :(得分:0)
我能想到你关心物理内存地址的唯一原因是你试图直接与某些内存映射硬件对话......在这种情况下你需要比malloc()
更多的东西。您必须使用内核或驱动程序接口,或禁止使用类似UNIX /dev/mem
之类的操作系统后面 - 或者更好的是,自己编写驱动程序以将所需的物理内存映射到应用程序中虚拟内存。