C中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;
}

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

4 1 8

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

解决方法

它被称为 Structure Padding

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

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

希望这可以帮助.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...