C中sizeof运算符的行为

Jai*_*dra 6 c struct sizeof

我的代码变得异常,如下所示

#include<stdio.h>
struct a
{
    int x;
    char y;
};
int main()
{   
   struct a str;
   str.x=2;
   str.y='s';
   printf("%d %d %d",sizeof(int),sizeof(char),sizeof(str));
   getch();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于这段代码,我得到了输出:

4 1 8
Run Code Online (Sandbox Code Playgroud)

据我所知,该结构包含一个大小为4的整数变量和一个大小为1的char变量,因此结构a的大小应该为5.但是结构的大小为8.我使用的是Visual C++编译器.为什么会这样?

Bin*_*ier 12

它被称为结构填充

具有以4字节字对齐开始的数据结构(在具有4字节总线和处理器的CPU上)在围绕存储器以及RAM和CPU之间移动数据时效率更高.

您通常可以使用编译器选项和/或编译指示关闭它,这样做的具体细节取决于您的特定编译器.

希望这可以帮助.


md5*_*md5 8

编译器插入填充以用于优化和对齐目的.这里,编译器在两个成员之间(或之后)插入3个虚拟字节.

您可以使用#pragma指令处理对齐.