1

32ビットホストのWindowsアプリケーションは共有メモリをセットアップし(メモリマップトファイル/ CreateFileMapping()APIを使用)、他の32ビットクライアントプロセスはこの共有メモリを使用して相互に通信します。

ホストアプリケーションを64ビットプラットフォームに移植することを計画しており、準備ができたら、32ビットと64ビットの両方のクライアントプロセスがメインの64ビットホストアプリケーションによる共有メモリセットアップを使用できるようにする予定です。

ホストx32アプリケーション用に記述された元のコードは、ほとんどすべての場所で「size_t」を使用します。これは、x32からx64に移動するときに4バイトから8バイトと異なるため、置き換えを探しています。

「size_t」を「unsignedlonglong」に置き換えて、32ビットと64ビットで同じサイズになるようにします。

より良い代替案を提案してもらえますか?また、「unsigned long long」を使用すると、x32アプリのパフォーマンスに影響がありますか?


調査完了-非常に有用な記事が見つかりました-a)32ビットから64ビットへの移植に関する20の問題(www.viva64.com)b)コンパイラフラグまたはフックを使用してx64プラットフォームの「size_t」を4バイトに制限/変更する方法がありませんtypedefなので/crooks

4

1 に答える 1

3

64ビット変数を使用すると、通常、32ビットアプリケーションの速度が低下します。

ただし、通常、すべてのプロセスで同じ仮想アドレスに共有メモリを配置することはできないため、共有メモリブロックの先頭に相対的なアドレスを使用している可能性があります。また、アプリケーションは32ビットプロセスをサポートするため、共有メモリブロックのサイズはおそらく4GB未満になります。では、unsigned intを使用してみませんか?

どのタイプを選択する場合でも、typedefを使用して意味のある名前(例:shared_memory_address)を付け、その名前を一貫して使用するのが賢明です。そうすれば、必要に応じて、後で基になるタイプを変更できます。

于 2012-09-23T22:39:20.550 に答える