代码之家  ›  专栏  ›  技术社区  ›  dshin

确定c++方法的大小

  •  4
  • dshin  · 技术社区  · 11 年前

    我有一个.cpp文件,其中定义了各种方法:

    // test.cpp
    
    // foo() is not inlined
    void foo() {
      ...
    }
    

    我编译它:

    g++ test.cpp -o test.o -S
    

    现在我想通过检查 test.o ,指令的内存字节数 foo() 占。我该怎么做?

    我之所以这样问,是因为我通过仔细的分析和实验,确定了我会导致指令缓存未命中,从而导致某些关键路径上的速度显著下降。因此,我想了解各种方法占用了多少字节,以指导我缩小指令集大小的努力。

    2 回复  |  直到 11 年前
        1
  •  4
  •   Carl Norum    11 年前

    我不会推荐 -S 除非您喜欢ISA的手动和手动计算指令大小。相反,只需构建和拆卸,很快就会得到答案:

    $ cc -c example.c 
    $ objdump -d example.o 
    
    example.o:     file format elf64-x86-64
    
    
    Disassembly of section .text:
    
    0000000000000000 <f>:
       0:   55                      push   %rbp
       1:   48 89 e5                mov    %rsp,%rbp
       4:   89 7d fc                mov    %edi,-0x4(%rbp)
       7:   8b 45 fc                mov    -0x4(%rbp),%eax
       a:   83 c0 03                add    $0x3,%eax
       d:   5d                      pop    %rbp
       e:   c3                      retq   
    

    如您所见,此函数的长度为15字节。

        2
  •  4
  •   Seva Alekseyev    11 年前

    生成地图文件,解析地图文件。最后可能会有一些填充,但这会给你一个想法。

    在g++中,选项为:

    -Xlinker -Map=MyProject.txt
    
    推荐文章