正如这里之前的答案中所提到的,Windows 操作系统有一个注册表项,用于强制从自上而下分配内存,以帮助在从 32 位代码 -> 64 位移动时捕获指针截断问题。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\AllocationPreference
但是我在 MacOS 中看不到任何类似的东西。我写了一个快速程序来检查,似乎在 64 位中,所有分配的内存至少需要 33 位来表示它们的地址。
我想知道 64 位 MacOS X 程序是否会在可以以 32 位或更少位表示的地址空间中分配内存?如果我在 32 位中编译和运行相同的程序,它显然使用较低 32 位空间中的地址。
int main(int argc, const char * argv[])
{
void * ptr = NULL;
for (int i = 0; i < 20; i++)
{
ptr = malloc(10);
if ((UInt64)ptr > INT32_MAX)
printf("Pointer = %p > 32 bits required!\n", ptr);
else
printf("Pointer = %p <= 32 bits ok\n", ptr);
}
return 0;
}
谢谢你的帮助!
马特