struct Hoge
{
char c;
int i;
};
上記の構造体サイズは理屈上は5バイトであるが、パディングされてるので実際には8バイトになっている。こいつを確実に5バイトにしたいときは#pragma pack命令を使う。
#pragma pack(push, 1)
struct Hoge
{
char c;
int i;
};
#pragma pack(pop)
1バイト単位でアラインメントを調整するので、結果としてパディングされないということになる。サンプルコード
#include <stdio.h>
struct A
{
char c;
int i;
};
#pragma pack(push,1)
struct B
{
char c;
int i;
};
#pragma pack(pop)
int main()
{
printf("sizeof A: %d\n", sizeof(A));// >> sizeof A: 8
printf("sizeof B: %d\n", sizeof(B));// >> sizeof B: 5
return 0;
}
バイナリでファイルを読み込むときに、使えそうなテクだ。参考サイト
0 件のコメント:
コメントを投稿