Pocket

 

自分用のメモです。
以下は、Appleドキュメント「Cocoa Touch 64ビット移行ガイド」からの抜粋です。

・整数型
64ビットデータ型

上の表より、主なものでは
・NSInteger型  4byte → 8byte
・long型    4byte → 8byte
・ポインタ型  4byte → 8byte
が変更となっています。

・浮動小数点数型
64ビットデータ型2

こちらは、CGFloat型が 4byte → 8byteに変更となっており、
CGFloat型の実体が float型からdouble型へ変わったとのことです。

64ビット環境でも正常に動作するコードを記述するために
・64ビットlong整数を32ビット整数に代入しない。
・64ビットポインタを32ビット整数に代入しない。
・算術演算の際に起こるポインタやlong整数の切り捨て(その他、整数型の違いによる算術演算上の問題)を避ける。
・データ型のバイト長の違いによって起こる、揃え境界の問題を解消する。
・32ビットランタイム、64ビットランタイムで共通に用いる構造体は、メモリ上の配置が同じであるようにする。
・アセンブリ言語で記述したコードは、64ビット版の新しい命令コードやランタイムに合わせて書き直す。
・可変引数の関数を固定引数の関数に(あるいはその逆に)キャストすることは避ける。

変数がとりうる値の範囲が限定されている場合には、
ビット幅を明示した整数データ型(int8_t, int16_t, int32_t, int64_t等)を使用するという方法もあるとのことです。

メモリ性能の最適化
・データの配置をコンパクトにする。
・データ構造体をパックする。
 揃え境界が大きいものから順に並べ換えるとよい。
・できるだけポインタを使わない。
・キャッシュ化は本当に必要な場合に限定する。

コンパイラが構造体の各要素の境界を揃えるためにパディングを追加することがあるので、
それを考慮し構造体の各要素の配置を揃え境界の大きいものから順に並べると良いとのことです。

64ビットバイナリ作成手順
32ビット、64ビットの、両方のランタイム環境に対応したアプリケーションを構築する、大まかな手順を以下に示します。
1. Xcode 5.0.1をインストールする。
2. プロジェクトを開く。
 プロジェクトを最新の形に更新するよう促すメッセージが現れます。
 更新すると、64ビット版で問題になりうる事項を、コンパイル時に警告やエラーとして検出するようになります。
3. iOS 5.1.1以降をターゲットにするよう、プロジェクト設定を更新する。
 iOS 5.1以前であれば、64 ビットプロジェクトはビルドできません。
4. プロジェクトのビルド設定「Architectures」を、「Standard Architectures (including 64-bit)」に変更する。
5. 64ビットランタイム環境に対応するようアプリケーションを更新する。
 この工程では、コンパイラが新たに検出するようになった警告やエラーメッセージが役立つでしょう。
 もっとも、コンパイラ任せですべて足りるわけではありません。
6. 実際に64ビットハードウェア上でテストする。
 開発にはiOSシミュレータが有用ですが、関数呼び出し規約など、実デバイス上でなければ影響が顕在化しない事項もあります。
7. Instrumentsを使ってメモリ利用効率を改善する。
8. 両方のアーキテクチャに対応したアプリケーションを送信して承認を求める。

私も実際にこの手順で64ビット対応バイナリを作成してみました。
Xcodeで「Run」させたら、警告が沢山出ました。ほとんどがデータ型の修正を促すものでした。

 

Pocket

Comments are closed.