读书人

请问c++的class A编译器会产生什么内容

发布时间: 2012-02-27 10:00:22 作者: rapoo

请教c++的class A编译器会产生什么内容
class a
{
;
}

其他什么都没有

[解决办法]
一个4字节空间
[解决办法]
一个空类占用一个字节
这个是为了区分不同的对象
[解决办法]
class A
{
};
int main()
{
A a;
int i=0;
A *pa=&a;
int *pi=&i;
return 0;
}
感觉这个东西依赖于编译器的吧,在vc6.0 release下,将optimination设置为default
函数 main():
push ebp
mov ebp, esp
sub esp, 10
mov dword ptr [ebp-10], 0 ; [ebp-0x10]为变量i
lea eax, dword ptr [ebp-8] ; [ebp-8]为变量a
mov dword ptr [ebp-C], eax ; [ebp-0xc]为pa, pa=&a
lea ecx, dword ptr [ebp-10] ;
mov dword ptr [ebp-4], ecx ; [ebp-4]为pi,pi=&i
xor eax, eax
mov esp, ebp
pop ebp
retn
可以看到a确实分配了[ebp-8]处的四个字节

再来:
int main()
{
A a;
int i=0;
int size_a=sizeof(a); //将这句改成这样
int *pi=&i;
return 0;
}

push ebp
mov ebp, esp
sub esp, 10
mov dword ptr [ebp-10], 0
mov dword ptr [ebp-8], 1 ;将常数1赋给size_a,说明sizeof(a)编译时期就生成了大小1
lea eax, dword ptr [ebp-10]
mov dword ptr [ebp-4], eax
xor eax, eax
mov esp, ebp
pop ebp
retn

这样看,确实为变量 a 分配了4个字节的空间,但是sizeof(a)操作在编译期间就生成了一个
常量1作为a的大小。
[解决办法]
这个问题和具体的编译器实现有关
可参考 Stanley Lippman的 Inside the C++ Object Model
[解决办法]
占一字节
[解决办法]
Microsoft777() ( ) 信誉:100 2007-07-24 18:25:53 得分: 0


一个空类占用一个字节
这个是为了区分不同的对象


读书人网 >C++

热点推荐