ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja de ja ja ja ja en ja ja ja en ru sv sv en en fr fr fr fr fr en fr fr fr fr fr ja ja en ru sv sv en ast fr fr fr fr fr fr fr fr fr fr fr en fr fr fr fr fr en fr fr fr fr fr en fr fr fr fr fr ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja ja vi ja sv eu ja en en hu ja ja en en pl ja ja jbo hbs_lat en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
ノータブルコード6 - ポインターのサイズで32bit環境を見分ける - 2020-05-14 - ククログ
Groongaは32bit用パッケージと64bit用パッケージを配布していますが、32bit環境のときだけコンパイルオプション等を設定したいケースがあります。
例えば、32bitのWindows向けパッケージはCMakeを使用してビルドしていますが、CMakeには32bitのWindowsかどうかを判定できる定義済みの変数はありません。 WIN32という定義済みの変数がありますが、これはコンパイルターゲットが(64bitを含む)Windowsの場合にTrueになるので、32bitかどうかの判定には使えません。
そこでGroongaでは、以下のようにポインターのサイズを使って32bitかどうかを判定しています。 (CMAKE_SIZEOF_VOID_Pはvoidポインタのサイズを計算してくれるCMakeの定義済みの変数です。)
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32bit list(APPEND MRUBY_DEFINITIONS "MRB_METHOD_T_STRUCT") endif()
データ型のサイズは、データ型モデルという定義にしたがって決まります。データ型モデルとはデータ型の大きさを定義したもので、OSによって異なりますが、概ね以下のどれかになります。
32bit用データ型モデル
64bit用データ型モデル
上記を見てわかるとおり、どのモデルであっても32bitの場合、ポインターのサイズは、32bit(4byte)になっています。 また、同様に64bitの場合も、ポインターのサイズはどのモデルも64bit(8byte)になっています。
現状出回っているほとんどの環境では、上記のように32bitと64bitでポインターのサイズは決まっているので、これを利用して32bit環境かどうかを判定できるのです。
様々なOSの32bit版のソフトウェアをメンテナンスしている方は、上記のような判定方法も利用してみてはいかがでしょうか?
現在クリアコードではソフトウェア開発者を募集しています! フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。
GitHub Actionsを使ったGroongaのパッケージのインストール、テストの自動化
ノータブルコード7 - Rustのif式を賢く使う
Apache Arrow
milter manager
ククログの記事はCC BY-SA 4.0とGFDLのデュアルライセンスで自由に利用できます。
クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。
クリアコードは「クリアコードをいい感じにする人」を1名募集しています。
クリアコードはフリーソフトウェア開発で培った技術力を提供しています。特にMozilla製品(Mozilla FirefoxとMozilla Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。