「ファットバイナリ」の版間の差分
表示
削除された内容 追加された内容
m →実装例 |
m Bot作業依頼: Apple関連記事の改名に伴うリンク修正依頼 (Apple|Apple) - log |
||
7行目: | 7行目: | ||
** バイナリ互換はあるが異なる最適化を持つ(PowerPC G5用の64ビットコードと32ビットコード) |
** バイナリ互換はあるが異なる最適化を持つ(PowerPC G5用の64ビットコードと32ビットコード) |
||
* OSが複数の[[コンピュータ・アーキテクチャ|アーキテクチャ]]をサポートする([[NeXT|NEXTSTEP]]の[[x86]]、[[SPARC]]、[[MC68000|68k]]サポートなど) |
* OSが複数の[[コンピュータ・アーキテクチャ|アーキテクチャ]]をサポートする([[NeXT|NEXTSTEP]]の[[x86]]、[[SPARC]]、[[MC68000|68k]]サポートなど) |
||
** ただし[[ |
** ただし[[Apple]]が採用した、[[PowerPC]]アーキテクチャとx86アーキテクチャ ([[Intel Mac]]) をサポートするバイナリは'''[[Universal Binary]]'''と呼ばれる |
||
このような場合、アーキテクチャを気にせずソフトを運用できるので、配布や管理面に優れる。ただし、使用されないアーキテクチャのコードを内蔵するためバイナリのサイズが大きくなる(このことが'''FAT'''と呼ばれる所以である)。通常そのような領域を削除するユーティリティなどを利用する場合が多い。 |
このような場合、アーキテクチャを気にせずソフトを運用できるので、配布や管理面に優れる。ただし、使用されないアーキテクチャのコードを内蔵するためバイナリのサイズが大きくなる(このことが'''FAT'''と呼ばれる所以である)。通常そのような領域を削除するユーティリティなどを利用する場合が多い。 |
2021年5月20日 (木) 11:12時点における版
ファットバイナリ (fat binary) とはコンピュータソフトウェアのバイナリ形式の一種で、一つのソフトを、互換性のない複数のCPUで実行できるように各CPU用のコードを同時に格納した形式をいう。
ファットバイナリの用途
ファットバイナリが利用されるのは次のような場合である。
- OSがベースCPUを変更した際に後方互換性を維持するため(MacintoshからPower Macintoshのケース)
- バイナリ互換はあるが異なる最適化を持つ(PowerPC G5用の64ビットコードと32ビットコード)
- OSが複数のアーキテクチャをサポートする(NEXTSTEPのx86、SPARC、68kサポートなど)
- ただしAppleが採用した、PowerPCアーキテクチャとx86アーキテクチャ (Intel Mac) をサポートするバイナリはUniversal Binaryと呼ばれる
このような場合、アーキテクチャを気にせずソフトを運用できるので、配布や管理面に優れる。ただし、使用されないアーキテクチャのコードを内蔵するためバイナリのサイズが大きくなる(このことがFATと呼ばれる所以である)。通常そのような領域を削除するユーティリティなどを利用する場合が多い。
実装例
Mac OSでは、旧来よりリソースフォークのCODEリソースに実行ファイルが収められており、Power Macではデータフォークに収めるというスタイルを採ることで実現している。一方のUniversal Binaryは、macOSにおいてリソースフォークをあまり使わない方針となったため、一ファイルに複数アーキテクチャのバイナリを収め、JavaによるプログラムでCPUを判定し、適切なバイナリを実行している[要出典]。JavaプログラムはJavaバイトコードとしてコンパイルされたものが、これら複数のバイナリの先頭に配置されている。そのため実行ファイルをバイナリエディタなどで表示すると、Javaのバイトコードであることを示すマジックナンバー (0xCAFEBABE) と各アーキテクチャ用のマジックナンバーが確認できる。