正如之前的答案中所提到的,Windows操作系统有一个注册表项,可以强制从Top-Down分配内存,以帮助捕获从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;
}
感谢您的帮助!
马特