我有一个.cpp文件,其中定义了各种方法:
// test.cpp
// foo() is not inlined
void foo() {
...
}
我编译它:
g++ test.cpp -o test.o -S
现在我想从test.o
的检查中确定指令foo()
占用多少字节的内存。我怎么能这样做?
我问,因为我通过仔细的分析和实验确定我发生指令缓存未命中导致某些关键路径显着减速。因此,我想了解各种方法占用了多少字节,以指导我缩小指令集大小的工作。
答案 0 :(得分:4)
我不建议使用-S
标志,除非您已经爱上了ISA的手册和手工计算指令尺寸。相反,只需构建和反汇编,presto - out就会得到答案:
$ 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个字节。
答案 1 :(得分:4)
使用地图文件生成构建,解析地图文件。最后可能会有一些填充,但它会给你一个想法。
在g ++中,选项包括:
-Xlinker -Map=MyProject.txt