This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
about g++ compilation for class constructor/destructor
- From: "drag chan" <zgchan317 at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Sun, 28 Sep 2008 13:59:29 +0800
- Subject: about g++ compilation for class constructor/destructor
hi list,
I'm using g++ to compile my project under linux. When checking c++
object files, I have a question about it.
there is a example:
------------------------------
class A {
public:
A();
A(int _i);
~A();
void hello();
private:
int i;
};
A::A()
{
i = 0;
}
A::A(int _i)
{
i = _i;
}
A::~A()
{
i = 2;
}
void A::hello()
{
i = 1;
}
--------------------------------
I compile it by using g++ 4.3.2 under Ubuntu 8.04, run 'objdump -dCr
test.o', and get the result:
--------------------------------
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <A::A()>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8b 45 08 mov 0x8(%ebp),%eax
6: c7 00 00 00 00 00 movl $0x0,(%eax)
c: 5d pop %ebp
d: c3 ret
0000000e <A::A()>:
e: 55 push %ebp
f: 89 e5 mov %esp,%ebp
11: 8b 45 08 mov 0x8(%ebp),%eax
14: c7 00 00 00 00 00 movl $0x0,(%eax)
1a: 5d pop %ebp
1b: c3 ret
0000001c <A::A(int)>:
1c: 55 push %ebp
1d: 89 e5 mov %esp,%ebp
1f: 8b 55 08 mov 0x8(%ebp),%edx
22: 8b 45 0c mov 0xc(%ebp),%eax
25: 89 02 mov %eax,(%edx)
27: 5d pop %ebp
28: c3 ret
29: 90 nop
0000002a <A::A(int)>:
2a: 55 push %ebp
2b: 89 e5 mov %esp,%ebp
2d: 8b 55 08 mov 0x8(%ebp),%edx
30: 8b 45 0c mov 0xc(%ebp),%eax
33: 89 02 mov %eax,(%edx)
35: 5d pop %ebp
36: c3 ret
37: 90 nop
00000038 <A::~A()>:
38: 55 push %ebp
39: 89 e5 mov %esp,%ebp
3b: 8b 45 08 mov 0x8(%ebp),%eax
3e: c7 00 02 00 00 00 movl $0x2,(%eax)
44: 5d pop %ebp
45: c3 ret
00000046 <A::~A()>:
46: 55 push %ebp
47: 89 e5 mov %esp,%ebp
49: 8b 45 08 mov 0x8(%ebp),%eax
4c: c7 00 02 00 00 00 movl $0x2,(%eax)
52: 5d pop %ebp
53: c3 ret
00000054 <A::hello()>:
54: 55 push %ebp
55: 89 e5 mov %esp,%ebp
57: 8b 45 08 mov 0x8(%ebp),%eax
5a: c7 00 01 00 00 00 movl $0x1,(%eax)
60: 5d pop %ebp
61: c3 ret
----------------------
my question is why every constructor/destructor of class A have a
couple of same code blocks in the object file?
best regrads,
dragchan