class x;class xy public x;xy test;问sizeof(test)是多少?该如何解决
class x;class xy public x;xy test;问sizeof(test)是多少?
输出结果是12,我怎么都想不通。。我认为是16呢,求教各位原因!
------解决方案--------------------
对象布局+内存对齐,都要考虑。
------解决方案--------------------
------解决方案--------------------
由于static变量是保存在类存储空间的而不是对象空间,所以说不要计算任何static的变量。
另外对齐就是和最大的字节对齐,比如,一个int,一个char,char虽然占一个字节,但是在保存的时候和int对齐,也会分配四个字节。
不信的话你sizeof(一个x类型的对象)肯定是8,而不是12
实际上你sizeof(test)其实就是
int number;
char X;
char Y;
这三个变量的空间。刚好12个字节
------解决方案--------------------
说白了你系统为class xy 事先开辟的空间就是:
int number;
char X;
char Y;
按照内存4字节对齐:sizeof(test) = 12 没错啊
------解决方案--------------------
- C/C++ code
#include<iostream> using namespace std; class x { public: static int count; int number; private: char X; }; class xy:public x { private: char Y; public: static int type; }; int main() { xy test; cout<<sizeof(test)<<endl; return 0; }
输出结果是12,我怎么都想不通。。我认为是16呢,求教各位原因!
------解决方案--------------------
对象布局+内存对齐,都要考虑。
------解决方案--------------------
------解决方案--------------------
由于static变量是保存在类存储空间的而不是对象空间,所以说不要计算任何static的变量。
另外对齐就是和最大的字节对齐,比如,一个int,一个char,char虽然占一个字节,但是在保存的时候和int对齐,也会分配四个字节。
不信的话你sizeof(一个x类型的对象)肯定是8,而不是12
实际上你sizeof(test)其实就是
int number;
char X;
char Y;
这三个变量的空间。刚好12个字节
------解决方案--------------------
说白了你系统为class xy 事先开辟的空间就是:
int number;
char X;
char Y;
按照内存4字节对齐:sizeof(test) = 12 没错啊
------解决方案--------------------