结构内存分é…,内存分é…应为4çš„å€æ•°

时间:2018-09-06 18:50:57

标签: c memory struct

struct x
{
  char b;
  short s;
  char bb;
};


int main()
{
 printf("%d",sizeof(struct x));
}

输出为:6

我在32ä½ç¼–译器上è¿è¡Œæ­¤ä»£ç ã€‚输出应该是8个字节。

我的解释-> 1. Char需è¦1个字节,下一个shortå ç”¨2çš„å€æ•°ï¼Œå› æ­¤short创建填充1并å ç”¨2个字节,这里已ç»åˆ†é…了4个字节。现在,唯一剩下的charæˆå‘˜å ç”¨1个字节,但是由于内存分é…是4çš„å€æ•°ï¼Œå› æ­¤æ€»å†…存为8个字节。

2 个答案:

答案 0 :(得分:5)

结构的对é½è¦æ±‚是具有最大对é½æ–¹å¼çš„æˆå‘˜çš„对é½è¦æ±‚。这里的最大对é½æ–¹å¼é€‚用于dict.get(),因此å¯èƒ½æ˜¯short。因此,两个2,两个b和两个s得出6。

答案 1 :(得分:0)

C struct内存布局完全是特定于实现的,您ä¸èƒ½å‡è®¾æ‰€æœ‰è¿™äº›ã€‚

此外,在C的典型对é½æ–¹å¼ä¸­ï¼Œç»“构如下:

NODE.JS

çš„sizeof = 6,因为如果类型“ shortâ€å­˜å‚¨åœ¨ä¸¤ä¸ªå­—节的内存中,则上述数æ®ç»“æž„çš„æ¯ä¸ªæˆå‘˜å°†å¯¹é½2个字节。 Data1çš„å移é‡ä¸º0,Data2çš„å移é‡ä¸º2,Data3çš„å移é‡ä¸º4。此结构的大å°ä¸º6个字节。

请å‚è§https://en.wikipedia.org/wiki/Data_structure_alignment