This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]