sizeof(struct)的问题

kangnixi 2010-01-25 06:30:13
#include<iostream.h>
struct A
{
char ch;
int n;
};
void main()
{
int n=sizeof(A);
cout<<"sizeof(A)="<<n<<endl;
cout<<sizeof(char)<<endl;
cout<<sizeof(int)<<endl;
}


在我电脑上运行结果是:
sizeof(A)=8
1
4


书上解释:
在默认情况下,为了方便对结构体内的元素访问和管理,当结构体内的长度都小于处理器位数的时候,便以结构体中最长的数据元素为对齐单位,也就是说结构体的长度大于最长的数据元素的整数倍。如果结构体内存长度大于处理器的位数,那么就以处理器的位数为对齐单位。但是结构体内类型相同的连续元素将在连续的空间内和数组一样

有点看不明白,转不过弯来,查了资料,也不明白,sizeof怎么计算结构体的
...全文
113 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesi3344 2010-01-25
  • 打赏
  • 举报
回复
路过
stardust20 2010-01-25
  • 打赏
  • 举报
回复
在默认情况下,为了方便对结构体内的元素访问和管理,当结构体内的长度都小于处理器位数(具体电脑可能是32位或者 64位)的时候,便以结构体中最长的数据元素为对齐单位(例子中这里是以int型的大小为对齐单位),也就是说结构体的长度大于最长的数据元素的整数倍。(因为char不足一个int型大小所以,把它补足一个int这边你机子上是4个字节)如果结构体内存长度大于处理器的位数,那么就以处理器的位数为对齐单位。
tony_chenypc 2010-01-25
  • 打赏
  • 举报
回复
#pragma pack(push,1)
struct A
{
char ch;
int n;
};
#pragma pop()
//就还原了
z569362161 2010-01-25
  • 打赏
  • 举报
回复
我的回答是暂时最详细的了。

还有运行结果都是一样的。
FrankSun80 2010-01-25
  • 打赏
  • 举报
回复
struct A
{
char ch;
int n;
};


char ch; 占一个字节
int n; 占四个字节,内存对齐的原因,会在上面的ch后补三个字节

实际上:
struct B
{
char ch;
char ch1;
int n;
};
struct B
{
char ch;
char ch1;
char ch2;
int n;
};

求sizeof的结果在你那里都是一样的~

好像内存对齐可以设置,也与编译器有关,建议楼主再看资料,呵呵


昵称很不好取 2010-01-25
  • 打赏
  • 举报
回复
struct A
{ //系统默认4字节(32位)对齐,关于字节对齐楼google下,知识很多
char ch;//0~3
int n; //4~7,与ch一起共占0~7,共8个字节
};
太乙 2010-01-25
  • 打赏
  • 举报
回复
简而言之,lz的结构体,内存里存放的是:

cccc cccc cccc cccc xxxx xxxx xxxx xxxx
iiii iiii iiii iiii iiii iiii iiii iiii
太乙 2010-01-25
  • 打赏
  • 举报
回复
DLevel 2010-01-25
  • 打赏
  • 举报
回复
错了,不要怪 sizeof
DLevel 2010-01-25
  • 打赏
  • 举报
回复
月经贴,你要怪sizeof();查查CSDN吧

64,654

社区成员

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

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