为什么这段代码中sizeof显示8字节?
int 有 4 个字节
char 有 1 个字节
为什么sizeof不显示5字节?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct test
{
int num;
char ch;
};
printf("%lu", sizeof(struct test));
return 0;
}
我以为sizeof显示的是5,但它显示的是8字节
观察:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct test
{
int num;
char ch;
};
struct test2
{
int num;
char ch;
} __attribute__((packed));
printf("%lu\n", sizeof(struct test));
printf("%lu\n", sizeof(struct test2));
return 0;
}
stieber@gatekeeper:~ $ gcc Test.c && ./a.out
8
5
第一个版本使用“填充”,因此只需执行
10*sizeof(test)
为 10 个测试结构的数组分配内存之类的事情仍然会提供有效的内存布局。
未对齐的访问效率较低,在某些平台上甚至会导致崩溃。