1

ここの以前の回答で述べたように、Windows OS にはレジストリ キーがあり、トップダウンからメモリ割り当てを強制して、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