1.今天做笔试题的时候,想当然的认为类的成员函数是占4字节的指针,刚才试了下发现完全错了。
#include <stdio.h>
class Data
{
public:
Data();
~Data();
char a;
short b;
int c;
};
void main()
{
printf("%d",sizeof(Data));
getchar();
}
关于字节对齐问题相比都不用多说了,今天题目中明确说明了四字节对齐。
成员函数是不占内存(严格说他存在代码区)的,所以计算类的大小就是成员变量的大小。当你这个类是多态类的时候(任意一成员函数为虚函数)类就多了一个隐藏的成员变量,虚函数指针。
最后输出为8
class Data
{
public:
Data();
~Data();
virtual int calc();
virtual int month();
virtual int day() = 0;
char a;
short b;
int c;
};
变为上面时,输出就为12,注意只有一个虚函数指针。
2.
void calc()
{
int *p1,*p2,value;
p1 = (int*)0x500;
p2 = (int*)0x518;
value = p2 - p1;
printf("%d",value);
}
做题时候想的太单纯了,其实很简单,记录下吧。输出为6。