设为首页 加入收藏

TOP

函数执行顺序(一)
2023-07-23 13:38:24 】 浏览:157
Tags:

C++对象构造和析构

//遗留的问题:C++中构造函数和析构函数的执行顺序到底是怎么样的呢?
class Object
{
private:
    int val;
public:
    Object(int x)
    {
        val = x;
        cout << "create :" << val << endl;
    }    
};
Object o1(1);

int main()
{
    Object o2(2);
}

Object o3(3);

代码在Linux64平台编译运行,objdump -d 生成反汇编代码

汇编代码如下:

反汇编代码
Object:     文件格式 elf64-x86-64

Disassembly of section .init:

0000000000001000 <_init>:
    1000:       f3 0f 1e fa             endbr64 
    1004:       48 83 ec 08             sub    $0x8,%rsp
    1008:       48 8b 05 d9 2f 00 00    mov    0x2fd9(%rip),%rax        # 3fe8 <__gmon_start__>
    100f:       48 85 c0                test   %rax,%rax
    1012:       74 02                   je     1016 <_init+0x16>
    1014:       ff d0                   callq  *%rax
    1016:       48 83 c4 08             add    $0x8,%rsp
    101a:       c3                      retq   

Disassembly of section .plt:

0000000000001020 <.plt>:
    1020:       ff 35 62 2f 00 00       pushq  0x2f62(%rip)        # 3f88 <_GLOBAL_OFFSET_TABLE_+0x8>
    1026:       f2 ff 25 63 2f 00 00    bnd jmpq *0x2f63(%rip)        # 3f90 <_GLOBAL_OFFSET_TABLE_+0x10>
    102d:       0f 1f 00                nopl   (%rax)
    1030:       f3 0f 1e fa             endbr64 
    1034:       68 00 00 00 00          pushq  $0x0
    1039:       f2 e9 e1 ff ff ff       bnd jmpq 1020 <.plt>
    103f:       90                      nop
    1040:       f3 0f 1e fa             endbr64 
    1044:       68 01 00 00 00          pushq  $0x1
    1049:       f2 e9 d1 ff ff ff       bnd jmpq 1020 <.plt>
    104f:       90                      nop
    1050:       f3 0f 1e fa             endbr64 
    1054:       68 02 00 00 00          pushq  $0x2
    1059:       f2 e9 c1 ff ff ff       bnd jmpq 1020 <.plt>
    105f:       90                      nop
    1060:       f3 0f 1e fa             endbr64 
    1064:       68 03 00 00 00          pushq  $0x3
    1069:       f2 e9 b1 ff ff ff       bnd jmpq 1020 <.plt>
    106f:       90                      nop
    1070:       f3 0f 1e fa             endbr64 
    1074:       68 04 00 00 00          pushq  $0x4
    1079:       f2 e9 a1 ff ff ff       bnd jmpq 1020 <.plt>
    107f:       90                      nop
    1080:       f3 0f 1e fa             endbr64 
    1084:       68 05 00 00 00          pushq  $0x5
    1089:       f2 e9 91 ff ff ff       bnd jmpq 1020 <.plt>
    108f:       90                      nop

Disassembly of section .plt.got:

0000000000001090 <__cxa_finalize@plt>:
    1090:       f3 0f 1e fa             endbr64 
    1094:       f2 ff 25 2d 2f 00 00    bnd jmpq *0x2f2d(%rip)        # 3fc8 <__cxa_finalize@GLIBC_2.2.5>
    109b:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

Disassembly of section .plt.sec:

00000000000010a0 <__cxa_atexit@plt>:
    10a0:       f3 0f 1e fa             endbr64 
    10a4:       f2 ff 25 ed 2e 00 00    bnd jmpq *0x2eed(%rip)        # 3f98 <__cxa_atexit@GLIBC_2.2.5>
    10ab:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

00000000000010b0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>:
    10b0:       f3 0f 1e fa             endbr64 
    10b4:       f2 ff 25 e5 2e 00 00    bnd jmpq *0x2ee5(%rip)        # 3fa0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@GLIBCXX_3.4>
    10bb:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

00000000000010c0 <_ZNSolsEPFRSoS_E@plt>:
    10c0:       f3 0f 1e fa             endbr64 
    10c4:       f2 ff 25 dd 2e 00 00    bnd jmpq *0x2edd(%rip)        # 3fa8 <_ZNSolsEPFRSoS_E@GLIBCXX_3.4>
    10cb:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

00000000000010d0 <__stack_chk_fail@plt>:
    10d0:       f3 0f 1e fa             endbr64 
    10d4:       f2 ff 25 d5 2e 00 00    bnd jmpq *0x2ed5(%rip)        # 3fb0 <__stack_chk_fail@GLIBC_2.4>
    10db:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

00000000000010e0 <_ZNSt8ios_base4InitC1Ev@plt>:
    10e0:       f3 0f 1e fa             endbr64 
    10e4:       f2 ff 25 cd 2e 00 00    bnd jmpq *0x2ecd(%rip)        # 3fb8 <_ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4>
    10eb:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

00000000000010f0 <_ZNSolsEi@plt>:
    10f0:       f3 0f 1e fa             endbr64 
    10f4:       f2 ff 25 c5 2e 00 00    bnd jmpq *0x2ec5(%rip)        # 3fc0 <_ZNSolsEi@GLIBCXX_3.4>
    10fb:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

Disassembly of section .text:

0000000000001100 <_start>:
    1100:       f3 0f 1e fa             endbr64 
    1104:       31 ed                   xor    %ebp,%ebp
    1106:       49 89 d1                mov    %rdx,%r9
    1109:       5e                      pop    %rsi
    110a:       48 89 e2                mov    %rsp,%rdx
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从零实现俄罗斯方块(c语言+思路.. 下一篇C++指针【cherno课程学习】

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目