共用讨论一个技术问题:)
#include <iostream>
using namespace std;
class A{
public:
int x,y,z;
void foo() const{
cout < < "A Class " < <endl;
}
};
int main(){
cout < <sizeof(A) < < " Bytes of Class A " < <endl;
A a;
cout < <sizeof(a) < < " Bytes of an object of A " < <endl;
system( "PAUSE ");
return 0;
}
为什么都是输出12字节呢?(vs2005)
[解决办法]
我来帮助liehen8475重新发下吧:
sizeof(A)的值跟类中成员变量的定义顺序,预编译命??pragma pack(n)都有关系.windows默认??pragma pack(2)也就是类中的成员变量按2个字节对齐.楼主的类中定义了3个int型变量按2字节对齐结果自然就是12.
楼主可以做下面一个实??
class A
{
int a;
char b;
int c
char d;
};
这个时候默认对齐是两个字节a占4个字节没有问题,char b只有一个字节但要按2对齐所有c是从b后空一个字节开始存储.于是sizeof(A)就是12??
如果上面的代码加??pragma pack(4)结果就是16??
改变变量定义顺序也可能不同,楼主可以自己试下然后分析下.
希望对你能有帮助
为什么我发的都是乱码?
[解决办法]
谢谢iambic()帮我翻译,昨天回不了贴很郁闷。
上个帖子写的预编译是#pragma pack(n)。
现在在细致的讨论下类的存储,在class中成员变量按照顺序按照对齐要求在内存中排列,而普通成员函数在编译时是静态绑定,类调用时就象调用库函数一样,所以类空间中没有为普通成员函数分配空间,但是虚函数和纯虚函数是动态绑定的,编译时需要一个指针指向一个虚函数表,所以当类中有虚函数时,类的内存分配为 成员变量+虚函数表指针(4个字节,多个虚函数也只有一个该指针)。
[解决办法]
建议去看《深度探索C++对象模型》