确定C++方法的大小

4
我有一个包含多种方法定义的.cpp文件:
// test.cpp

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

我来翻译一下:

我编译它:

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

现在,我想通过检查test.o文件来确定指令foo()占用多少字节的内存。 我该怎么做?

我之所以这样问是因为,经过仔细的分析和实验,我已经确定在某些关键路径上出现了指令高速缓存未命中,导致了显著的减速。 因此,我想了解各种方法占用了多少字节的空间,以指导我努力缩小指令集大小。


1
尝试为函数分别设置优化级别。因此,有些是最小化大小,有些是最大化速度。 - Neil Kirk
2个回答

4

我不建议使用-S标志,除非你热爱计算机指令集手册并手动计算指令大小。相反,只需构建和反汇编即可,预先设置 - 答案就出来了:

$ 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个字节长。


4
使用地图文件生成构建,解析地图文件。可能会有一些填充在结尾处,但这将给您一个想法。
在g ++中,选项为:
-Xlinker -Map=MyProject.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接