ベストアンサー
ポータブル実行可能ファイル
Portable Executable形式は、実行可能ファイル、オブジェクトコード、DLL、FONフォントファイルなど、32ビットおよび64ビットバージョンのWindowsオペレーティングシステムで使用されるファイル形式です。 PE形式は、ラップされた実行可能コードを管理するためにWindowsOSローダーに必要な情報をカプセル化するデータ構造です。
これには、リンク、APIエクスポートおよびインポートテーブル、リソース管理データ、スレッドの動的ライブラリ参照が含まれます。 -ローカルストレージ(TLS)データ。 NTオペレーティングシステムでは、PE形式がEXE、DLL、SYS(デバイスドライバー)、およびその他のファイルタイプに使用されます。 Extensible Firmware Interface(EFI)仕様では、PEはEFI環境での標準の実行可能形式であると規定されています。
回答
Cソースコードの移植性は、目的のターゲットプラットフォームである限り、動作中のCコンパイラが利用可能であるため、プラットフォームを変更せずに再コンパイルすることで、プラットフォームをターゲットとするCソースコードを移動できます。ほぼすべてのターゲットプラットフォームでCコンパイラを使用できるため、Cは非常に移植性の高いプログラミング言語と見なされます。
とはいえ、Cでコードを記述するだけで 移植性を保証するものではありません。移植性のないコードを書かないように、規律を行使する必要があります。たとえば、次のいずれかを実行するコードを作成すると、移植性のないコードになります。
- char以外のデータ型のサイズを想定します。
- データがメモリ内および構造内でどのように整列されるかについての仮定。
- データが構造内でどのようにパック/パディングされるかについての仮定を行います。
- バイト順序(ビッグエンディアンとリトルエンディアン)についての仮定を行います。 。
- 非標準のコンパイラ拡張を使用します。これは、すべてのコンパイラ実装で使用できるとは限りません。
- 非標準のライブラリ拡張を使用します。これは、すべてのプラットフォームで使用できるとは限りません。
- 実装で定義された動作に依存します。これは、コンパイラの実装によって動作が異なる場合があります。
- 未定義の動作が含まれます。ある環境では動作するように見えますが、別の環境では予期しない動作をする可能性があります。
- オペレーティングにAPI(アプリケーションプログラミングインターフェイス)呼び出しを行います。システム。すべての環境で使用できるとは限りません。
- 特定のメモリアドレスについて仮定します(たとえば、特定のメモリアドレスがハードウェアデバイスレジスタにマップされているなど)。
- ポインタのサイズ、またはポインタがintと同じサイズであると仮定します。
- 引数が(スタック上または特定のレジスタで)渡される方法について仮定します。
- インラインアセンブリ言語のソースコードが含まれています。
- 一部のコンパイラ実装ではまだサポートされていない可能性がある(場合によっては、サポートされていない可能性がある)C言語の最新かつ最高の機能を使用します。サポートされています。
- 上記のいずれかを実行するライブラリに依存しています。
これは完全なリストではありません。
可能な場合移植性のないコードの使用を避ける場合、最善の策は、その移植性のないコードを別のソースファイルに分離することです。次に、コードを新しいターゲットプラットフォームに移動する必要がある場合、ソースコードのどのサブセットを変更する必要があるかが非常に明確になります。