我有一个源文件:
#include <cstdlib>
#include <iostream>
int main() {
void *p = std::malloc(8192);
std::cout << std::hex << (size_t)p << std::endl;
std::free(p);
}
我在两个平台上对其进行了编译:(a)在MacOS上使用clang ++ 4.2.1,以及(b)在Linux上使用g ++ 7.3.0。
在macOS上,打印输出为7fa432001000
,在Linux上为257ec20
。
不期望macOS的打印输出。我认为malloc()
应该在堆中分配内存,如果它在后台使用mmap()
分配内存,那也很好。但是7fa432001000
似乎在堆栈位置中的地址,因为x86_64上虚拟内存的上限刚好低于7fffffffffff
(至少在当前的Linux中是这种情况-也许我是错误的。)
我的问题是:为什么macOS上的malloc()
返回这么高的地址?这是因为实现了Clang的libc ++的方式吗?