いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

enumの大きさ

突然ですが!

enum ってありますが、コイツは int と互換性がある事は衆知の事実です。つまり,Win32環境でビルドした場合では sizeof(enum_type) == 4 は確定でしょう。

しかしながら、気になることが。
32bit環境では、一番相性の良い 4byte になるのは良く解ります。 じゃぁ 64bit環境ではどうなるんだろう…?と。

int と互換性があるってことは、64bit環境でも4byte なのだろうか…。でもそれだと、折角の64bit幅が勿体無くね? MSは独自拡張してねぇのかな?


というわけで、VS2005b2にて以下のコードを x64 でビルドしてみました。

enum A
{
  A_ForcrPTR = MININT_PTR;
};

結果。 C4341 でした。(死
64bit環境でも、enumは "int" までしか扱えない模様です。


……勿体無い仕様だなぁ。
何が気になるって、構造体のメンバにしたときアライメントの関係で無駄な4バイトのスペースが出来てしまうだろう点ですね。多分8バイトアライメントでしょうから…。(気にしすぎという話もありますけど^^;)


ただ、この根本の原因は、Win64環境での sizeof(int) == 4 な点に有るような気がしないでもないですー
>どうにかならんかったのかなぁー。(苦笑