[讨论] 结果为什么是24呢?
#include<iostream>#include<stdio.h>
using namespace std;
struct name{
int s;
double g;
char a;
//char d;
};
int main()
{ int s=sizeof(struct name);
cout<<s;
return 0;
}
嗯,这个问题还是很有意思的,没有看过<<深度探索C++对象模型>>的一般不能解答这个问题,所以对C++有狂热爱好的朋友们可以看看那本书,但是要有心理准备,那本书很难的,可是一旦看上就会上瘾的;呵呵. 废话不说了,看我的代码: #include<iostream> #include<stdio.h> using namespace std;
struct name { int s; double g; char a; };
int main() { int temp = sizeof(double) + sizeof(int) + sizeof(char) + sizeof((name*)0); int size = (temp+8-1) & ~(8-1);//这里用了一个N帅的算法,原型是(bytes+_ALGIN-1) & ~(_ALGIN-1),其中_ALGIN就是8,如果想知道此算法的细节,请直接找我(QQ:10064806),或者去看<<STL源码刨析>>第二章(内存池算法),或者去看MFC库的字符串类(CString)的.cpp文件 cout << size << endl; return 0; } 4 + 8 + 1 = 13 因为是C++定义,所以有虚函数指针,又加4字节,结果是17字节. 因为必须8的倍数,所以填充7空字节,结果是24字节.
[此贴子已经被作者于2005-5-16 9:22:10编辑过]