空结构体的大小为多少?
int main(){
typedef struct{
}s;
cout<<sizeof(s)<<endl;
return 0;
}
输出为: 1
说明:本该是0,但是我们在什么结构实体的时候它必须在内存中占用一定空间,否则无法使用,至于具体占用多少,由编译器决定,在vs中为1(来自《剑指offer》)
结构体中加上构造函数和其他函数之后大小:
int main(){
typedef struct stu{
stu(){
cout<<"this is a constructor function."<<endl;
}
int test(){
cout<<"this is a function."<<endl;
}
}s;
cout<<sizeof(s)<<endl;
return 0;
}
输出是: 1
说明:调用函数只需知道函数地址,而函数地址只与类型有关,与类型实例无关,也就是地址只存在于类型中,实例中没有这个函数地址。所以实例中并没有加入任何东西,所以还是1。
将一个普通函数改为虚成员函数之后结构体大小:
int main(){
typedef struct stu{
stu(){
cout<<"this is a constructor function."<<endl;
}
virtual int test(){
cout<<"this is a function."<<endl;
}
}s;
cout<<sizeof(s)<<endl;
return 0;
}
输出为: 8
说明:实例中多了一个指向虚函数表的指针,64位机上位8字节。