这是我的结构,我想知道我的struct对象的分配大小。
struct toCheckSize
{
int a;
char b;
};
struct toCheckSize v,w,z;
那么分配给v,w,z的内存的大小是多少?根据编译器,它表示v,w,z的大小为8。
答案 0 :(得分:0)
任何数据类型的大小取决于供应商 考虑sizeof(int)= 4字节和 sizeof(char)= 1个字节
int main()
{
struct ex//ex is tag for this structure
{
char c;
int i;
};//this is the just declaration that ex tag is of the form
struct ex x,y,z;//memory will be allocated here
printf("%u %u %u\n",x,y,z);
printf("%u %u %u\n",&x,&y,&z);
printf("%u %u %u\n",sizeof(x),sizeof(y),sizeof(z));
printf("%u %u %u\n",sizeof(x.i),sizeof(y.i),sizeof(z.i));
printf("%u %u %u\n",sizeof(x.c),sizeof(y.c),sizeof(z.c));
return 1;
}
输出
下面 添加字符填充以满足也依赖于供应商的allignment constarint
但请参阅以下代码:
struct record
{
int id;
char name[20];
float salary;
};
struct record student;
的sizeof(学生); ====> 28bytes。 因为不需要为字符数组添加填充
答案 1 :(得分:-1)
结构的大小取决于系统中整数的大小。整数的大小为实现定义。但是考虑到你所看到的结构大小是8.我猜想sizeof(int) == 4
。然后大小如下
{
int a, --> 4 bytes
char b, --> 1 byte
--> padding 3 bytes
}
答案 2 :(得分:-2)
填充用于内存对齐。现代处理器通过使用默认打包访问对齐的内存来执
但是您可以使用struct __attribute__((__packed__)) toCheckSize
来使结构具有确切的大小。
另请参阅Structure padding and packing