C++的一个问题:为什么是56而不是54?
#include <iostream>
using namespace std;
struct Student
{
unsigned long ID;
char firstname[15];
char lastname[15];
char email[20];
};
void func(Student s)
{
cout<<sizeof(s)<<endl;
cout<<sizeof(s.ID)<<endl;
cout<<sizeof(s.firstname)<<endl;
cout<<sizeof(s.lastname
)<<endl;
cout<<sizeof(s.email)<<endl;
cout<<"why?"<<endl;
system("pause");
}
void main()
{
Student s0;
func(s0);
}
运行结果:
56
4
15
15
20
why?
请按任意键继续. . .
[解决办法]
字节对齐的缘故,访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放
[解决办法]
这应该跟内存对其有关系!
[解决办法]
真个Student类的大小要按照unsigned long ID;的大小对齐
[解决办法]
字节对齐
VC6-Project — Settings — c/c++ — Category — Code Generation — Struct Member Alignment
参考:
http://blog.csdn.net/xuxinshao/article/details/2244277
http://bbs.chinaunix.net/thread-1366708-1-1.html
[解决办法]
自然对齐···