2007-11 << 2007-12 >> 2008-01

2007-12-17 (月)

*構造体メンバのアライメント

少し前,Win32なプログラムを書いていて,しかも諸事情でSDKのヘッダファイルを使いたくないという変なプログラムを書いていたときのことです.

なかなか取れなかったバグの原因が構造体のアライメントだったりしたのは,かなりショックでした.構造体のパディングなんて分かりきっているつもりだったし.油断していました.

そのときは,pragmaでアライメントを無効にして解決しましたが,アライメントを無効に出来ないコンパイラって無いんでしょうか?大抵のコンパイラでは大丈夫ですが,実装者に任せられる部分なので分かりません.

Win32のAPIは構造体に激しく依存しているので,もし,アライメントの制御が出来ないと,プログラムが大変なことになります.

C++のstructはもう,デフォルトでアライメント無しにして欲しい.代わりに格納時のバイトオーダーを制御する構文があればさらにうれしい.

SDK無しでWin32のAPIを呼ぶ方法は別の機会に.