実行時チェックで利用可能な仮想メモリ (または RAM) が 4GB を超えないことが確認された場合、次のようなことができるプラットフォームはありますか?
// 1) cast pointer to void pointer
// 2) cast void pointer to uint64 type
// 3) set most significant bytes of uint64 type to 0 (might be wrong choice)
// 4) store as uint32 type
uint32_t trimmed_pointer = (uint64_t) (void *) pointer & 0x00000000ffffffff;
元のポインターを取得するには、次のようにします。
same_as_before_t *pointer = (void *) (uint64_t) trimmed_pointer
これはおそらくひどいハックであり、OS のメモリ マネージャーが仮想メモリを実装する方法 (コンパイラと同様に?) に完全に依存していることを認識しているので、純粋に好奇心からこれを尋ねています。