Visual Studioを使った時のアライメント指定

Visual Studio2005を使った場合でのアライメント指定を。

ちなみに2005でのアライメントのデフォルト値は8です。

コンパイラ実行時で指定するには?

IDE上ではプロパティウィンドウで設定できます。

コンパイラ単独で使う場合は実行時にZpオプションを渡します。
IDEの設定ではこのZpオプションが指定されています)

詳細は/Zp (Struct Member Alignment) | Microsoft Docsを。

ソース中で構造体単位で指定するには?

次のようにソース内でpragma命令のpack, popを使います。

#pragma pack(push,4)
class Data
{
    int    _index;
    double _value;
};
#pragma pack(pop)

このような形にすればアライメントが仮に8でもこの構造体のみは4バイトになります。

ただし64bitCPUなどは構造体のレイアウト(各メンバの並び順)自体,基本は8バイト
と扱うので動作が遅くなるかも…。

ちなみにアライメントの問題にぶつかったら

アライメントの問題はとてもやっかいでとくにプログラマ初心者はひっかかりやすいんじゃないかなぁと思います。
原因もわかんなーーーい!って感じになりやすい。

僕は働いてすぐPS2で128bitにやられましたが(笑)

まぁこの手の問題が発生するのはバイナリファイルをいじるときなんで,
基本はioライブラリみたいなのを作ってある程度どんな環境でも動くようにバイナリデータを構造体にマッピングするときにオフセットをいじるのがいいとは思います。

それとバイナリファイルの構造もなるべくアライメントのせいで無駄が出来ないように考えるとかね。