C语言中 sizeof 与 struct

来源:互联网 发布:淘宝客服电 编辑:程序博客网 时间:2024/04/28 05:09

C语言中,struct是由不同类型的变量组成的。


struct在内存存储时,是按照内存对齐来存放的,即开始和结束的地址都是n的倍数,这个n是由struct最长的变量类型决定的。

也就是struct的大小一定是n的整数倍。

例如一个struct含有double型,那么 n 就是8字节。

还有一个要满足的条件,每一种变量的存放的首地址也要是其自身大小的倍数。

下面简单起见,空字节用0表示。

{char, char, char, short, int }在内存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

  sizeof后的大小为 12Byte,char只要是地址就可以放,因为他的大小是1B,而short占了2B,所以存放的时候要空出1B才能保证粗放地址是2的倍数,int同理。

{char, char, char, short, int,char }在内存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

             char

sizeof后的大小为 16Byte,最后一个char的存放虽然只占用了1个字节,但是计算stuct大小是,必须是4B(int的大小)的倍数,


注:某些编译器会优化struct中变量的顺序,以保证占用空间最小,对于第二个例子,会把最后一个char放到第四个空字节上,使struct的大小变成12B。


原创粉丝点击