実際の構造サイズを知るにはどうすればよいですか?sizeofを使用すると、アライメント後のバイト数が返されます。例えば :
struct s {
char c;
int i
}
sizeof(s)= 8; アラインメントなしのバイトサイズ、つまり5を取得することに興味があります
構造の実際のサイズは、位置合わせ後の構造のサイズです。sizeof
メモリ内の構造体の戻りサイズを意味します。バイトに揃えられた構造が必要な場合は、コンパイラにそのように指示する必要があります。たとえば、次のようなものです。
#ifdef _MSVC
# pragma pack(push)
# pragma pack(1)
# define PACKED
#else
# define PACKED __attribute((packed))
#endif
struct byte_aligned {
char c;
int i;
} PACKED;
#ifdef _MSVC
# pragma pack(pop)
#endif
sizeof(byte_aligned)
5とその実際の5バイトをメモリに返します
sizeofは、実際の構造体のサイズを返します。
パディングなしのサイズは、コンパイラが適切と思われるパディングを挿入するため、少し意味がありません。一部のコンパイラは、構造体のパディングをオフにするプラグマをサポートしています。その場合はそれを使用する必要がありますが、おそらくあらゆる種類の楽しいことが起こります。
ドキュメントを誤解しました。
sizeofを使用すると、アライメント後のバイト数が返されます
これは正しくありません。パディングsizeof
後のバイト数を返しますが、これは同じではありません。
したがって、あなたが知りたいのが「私の構造がどれだけのスペースを取るか」でsizeof()
あるならば、それはあなたに正しい答えを伝えています。