为什么结构根据最高数据类型分配大小?

时间:2017-02-18 06:58:42

标签: c struct

这是我的结构,我想知道我的struct对象的分配大小。

struct toCheckSize
{
    int a;
    char b;
};

struct toCheckSize v,w,z;

那么分配给v,w,z的内存的大小是多少?根据编译器,它表示v,w,z的大小为8。

3 个答案:

答案 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;
 }

输出

See the output of this program

下面 添加字符填充以满足也依赖于供应商的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