web-dev-qa-db-ja.com

Windowsのインストールが常にリトルエンディアンであると安全に想定できますか?

私はWindowsでユーザースペースファイルシステムドライバーを書いていて、エンディアン変換は私が扱ってきたものです。この特定のファイルシステムは常にリトルエンディアン形式で値を保存し、ドライバーは(必要に応じて)それらを変換します。走っている。しかし、私が知る限り、デスクトップWindowsはリトルエンディアンアーキテクチャ(IA32、x86-84など)だけをサポートしているため、エンディアンの変換についても心配する必要があるのか​​と疑問に思っています。リトルエンディアンの値は、完全に細かい変換ではありません。この観測は正確ですか、そうであれば、Windowsが常にリトルエンディアンのハードウェア上で実行されると想定することは、一般的に受け入れられますか?さらに、エンディアンの問題をtestできるように、ビッグエンディアンエミュレーターなどでWindowsを実行することは(2011年に)可能ですか?

編集:わかりやすくするために、現在のコードの動作方法は、起動時にエンディアンチェックを行い、次にディスクから値をロードするたびに、次を使用するインライン関数を実行します。アーキテクチャがビッグエンディアンの場合、エンディアンを変更する組み込み関数。問題は、変換を行う必要のある場所を1つ以上見逃した可能性があるかどうかわからないことであり、失敗したかどうかを確認する最も簡単な方法は、プログラムをビッグエンディアンアーキテクチャで実行することです。 Windowsは通常リトルエンディアンプラットフォームで実行されていないため、これらのチェックを実行する必要がある場合は(a)を知っていることに興味があります(とにかく今日)。そして(b)どうすればコードをテストできるか、ビッグエンディアンアーキテクチャでWindowsを実行する方法が考えられないため、手動で逆にするallディスク上のマルチバイト値には、手作業で失敗する可能性のある手動プロセス。

27
jgottula

表示されるすべてのバージョンのWindowsはリトルエンディアンです。 NTカーネルは実際にはビッグエンディアンアーキテクチャで動作します 今日でも

8
Ana Betts

質問の変更後に編集:

A)いいえ、ターゲットがWindows x86またはx64の場合、エンディアンを確認する必要はありません。その場合は、エンディアンのチェックに時間を費やすことすらしません。

B)コードのバイエンディアンサポートを確認する場合は、クロスプラットフォームコンパイル可能なライブラリに分割することをお勧めします。次に、ビッグエンディアンをサポートするお気に入りのLinuxフレーバーでコードをコンパイルして実行し、機能するかどうかを確認します。バイエンディアンの問題を検出できるコンパイラやソフトウェアについてはまだ聞いていません。

元の応答:

私の知る限り、ビッグエンディアンをサポートするデスクトップバージョンまたはサーバーバージョンのウィンドウはありません。 Itaniumプロセッサー(常にIA32ではなくIA 64と呼ばれていたと私は信じていますが、私は間違っている可能性があります)はビッグエンディアンで実行できますが、Windowsではサポートされていません。

これは、Windows 8がARMプロセッサを対象としているため、Windows 8がリトルエンディアンになるだけであるということではありません。

何らかの理由でWindows(#ifdef _WIN32)を使用していて、ビッグエンディアンは、ディスクからロードするときにデータ構造を単に逆にし、常により一般的なリトルエンディアン形式で保存するだけです。

5
NtscCobalt