|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
次のガイドラインと、この章の後半に取り上げるバイトスワップの方法は、アプリケーションにおける最善のバイトスワップコードの確実な実現に役立ちます。
データ構造体のバイト順序は、メモリ上にある間は、ネイティブな順序を維持するようにします。バイトのスワップは、ディスクからのデータの読み取り時、またはディスクへの書き出し時に限って行うようにします。
可能な限り、コンパイラに作業をさせるようにします。たとえば、Core Foundation関数のCFSwapInt16BigToHostなどの関数呼び出しを使った場合、コンパイラは、その関数呼び出しが対象のプロセッサに対して何らかの処理を行うかどうかを確認します。コードが何もしなければ、コンパイラは関数を呼び出しません。コンパイラに作業をさせたほうが、#ifdef文を使用するよりも効率がよくなります。
大きなファイルにアクセスする必要がある場合は、実行しなければならないバイトスワップを最低限に抑えるような方法でデータを配置することを検討します。たとえば、最も頻繁にアクセスするデータをファイルに連続的に配置することができます。そうしておけば、データを読み取ってバイトスワップを行う対象は、データファイル全体ではなく、当該部分のデータに限定できます。
__BIG_ENDIAN__マクロと__LITTLE_ENDIAN__マクロは、必要な場合に限り使用します。__i386__や__ppc__など、特定のプロセッサタイプを確認するマクロは使用しないでください。
一貫性のあるバイト順序方式を選び、そこから逸脱しないようにします。つまり、ディスクに対するデータを読み書きを常に行う場合は、使用したいエンディアンフォーマットを選びます。そうすることで、データのバイト順序を確認する必要がなくなり、場合によってはバイト順序をスワップする必要もなくなります。
どの関数がビッグエンディアンデータを戻すのかを認識しておき、それらを正しく使います。そのような関数としては、BSDソケットネットワーク関数、DNSServiceDiscovery関数(たとえば、TCPポートとUDPポートはネットワークのバイト順序で指定)、およびColorSyncプロファイル関数(データはすべてビッグエンディアン)があります。IconFamilyElementデータ型とIconFamilyResourceデータ型(IconFamilyPtrデータ型とIconFamilyHandleデータ型も含まれます)は、常にビッグエンディアンです。ほかにも、ここに挙げていない関数とデータ型もある可能性があります。関数から返されるデータの詳細については、該当するAPIリファレンスを参照してください。
バイトのスワップは相応のパフォーマンスコストがかかるため、どうしても必要な場合に限り使用するということを覚えておいてください。
| < Previous PageNext Page > |
Last updated: 2006-03-08
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |