本人在很多书上看到说类的内存大小由其成员变量决定,但我做的一简单内存测试
却发现如下:
#include<iostream>
#include<ctype.h>
#include<string.h>class a
{
public:
a(){;}
a(int i){;}
virtual ~a(){;}
int i,j;
int f1(){;}
virtual double f2(){ return i;}
char *p1;
char c1;
int *k;
};class b:public a
{
public:
virtual double f2(){return 0;}
double f4();
char *pp;
};class c:public b
{
public:
virtual int ff1()=0;
virtual double f2();
double f4();
char a;
};class d
{
};int main()
{
char *p2="WESOFT";
//(*p2)++;
cout<<"p2 now is : "<<*p2<<endl;
int l;
a a1;
l=sizeof(a1);
cout<<"class a memory is: "<<l<<endl;
cout<<"class b memory is: "<<sizeof(b)<<endl;
cout<<"class c memory is: "<<sizeof(c)<<endl;
cout<<"class d memory is: "<<sizeof(d)<<endl;
return 0;
}最后输出如下:
class a memory is: 24
class b memory is: 28
class c memory is: 32
class d memory is: 1
这样的话好象与类的大小由成员变量决定不符。不知何解?请高手指定下。
却发现如下:
#include<iostream>
#include<ctype.h>
#include<string.h>class a
{
public:
a(){;}
a(int i){;}
virtual ~a(){;}
int i,j;
int f1(){;}
virtual double f2(){ return i;}
char *p1;
char c1;
int *k;
};class b:public a
{
public:
virtual double f2(){return 0;}
double f4();
char *pp;
};class c:public b
{
public:
virtual int ff1()=0;
virtual double f2();
double f4();
char a;
};class d
{
};int main()
{
char *p2="WESOFT";
//(*p2)++;
cout<<"p2 now is : "<<*p2<<endl;
int l;
a a1;
l=sizeof(a1);
cout<<"class a memory is: "<<l<<endl;
cout<<"class b memory is: "<<sizeof(b)<<endl;
cout<<"class c memory is: "<<sizeof(c)<<endl;
cout<<"class d memory is: "<<sizeof(d)<<endl;
return 0;
}最后输出如下:
class a memory is: 24
class b memory is: 28
class c memory is: 32
class d memory is: 1
这样的话好象与类的大小由成员变量决定不符。不知何解?请高手指定下。
{
};不是4或2我的理解是,由于类中没有数据成员,所以按1字节对齐。
{
};不是4或2我的理解是,由于类中没有数据成员,所以按1字节对齐。但我把虚函数都改成成员函数时发现它也给分配了4个字节的内存 这由是啥原因啊,难道定义了函数就一定得给出一空间来对齐?