malloc返回的地址是虚拟地址还是实际分配内存的物理地址?
编辑:
我在某处读到过:“在某些实现中,调用free()将内存释放回系统,而在其他情况下,它将被释放回进程。”“释放回系统”是否意味着该内存是实际的物理内存,“释放回进程”是否意味着它是虚拟内存?
这是一种在当前进程中有效的地址。它是虚拟地址还是物理地址取决于底层平台。
x[]
和 *(x+n)
) 和比较(以及其他可能的操作)的代码足够复杂以处理顺序性,那么它就可以变得可行。我肯定不想开发或使用这样的系统,但这并不意味着根据标准,它就不可能实现。例如,将内存ID上移32位(正如您所提出的)可以在生成的代码中自动完成。我的观点是,您应该仅对标准指定的内容进行假设。 - paxdiablo
malloc
时返回,但不能在另一个进程中返回。例如,已释放的块可能会添加到可用块的每个进程列表中。这与虚拟内存无关。通常是因为进程从操作系统中获取大块内存,然后在malloc
中将其分成小块。除非它知道整个块未使用,否则它无法释放给操作系统。 - Steve Jessop