一个小程序,谁能告诉我为什么呢??

yhwxxx 2007-08-22 06:45:17
下面代码中的结构体的字节数好像怎么都不对,不知道怎么回事。

#include <iostream>
using namespace std;
struct ABC
{
int a;
short int b;
short int c;
char ch;


}ABC;
int main()
{
ABC.a=1;
ABC.b=2;
ABC.ch='a';
ABC.c=3;
cout<<sizeof(ABC.a)<<endl;
cout<<sizeof(ABC.b)<<endl;
cout<<sizeof(ABC.c)<<endl;
cout<<sizeof(ABC.ch)<<endl;
cout<<"sizeof(ABC) is :"<<sizeof(ABC)<<endl;
return 0;
}
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
scrutin 2007-08-22
  • 打赏
  • 举报
回复
楼主应该去google搜索一下 “字节对齐”
看几分钟就搞懂了
free_job 2007-08-22
  • 打赏
  • 举报
回复
呵呵,你自己明白了,我多此一举了
free_job 2007-08-22
  • 打赏
  • 举报
回复
你这个结构在32位系统下应该是占12个字节,
int a --4个字节
short int b short int c 组成4个字节
char ch; 4个字节
楼上的正解,就是字节对齐问题
yhwxxx 2007-08-22
  • 打赏
  • 举报
回复
o ,thx!

对于下面的结构体
struct test
{
char x1;
short x2;
float x3;
char x4;
};
结构各成员空间分配情况是怎样的?
文章中解释:
结构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然对界地址上,在它们前面不需要额外的填充字节。在 test结构中,成员x3要求4字节对界,是该结构所有成员中要求的最大对界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了 3个空字节。整个结构所占据空间为12字节。
gfxiang 2007-08-22
  • 打赏
  • 举报
回复
编译器考虑了对齐,所以sizeof(ABC)不等于各个成员大小之和

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧