1

正如这里之前的答案中所提到的,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;
}

谢谢你的帮助!

马特

4

0 回答 0