我想对 c++ 的内存管理及其实现如 g++、vc++ 做一些研究。
第一个问题是自动对象(本地对象)在哪里?(内置类型,用户定义类型,STL ...)
我认为内置类型存储在堆栈中,这是在编译步骤中完成的。对于用户定义的类型,事实是什么?我之前在某处看到 STL 数据类型始终在堆内存中。于是我写了一个小函数,用g++编译,用objdump反汇编,看看编译器到底做了什么。
#include <string>
void autovar(){
std::string s;
}
拆解结果如下:
00000000 <__Z7autovarv>:
0: 55 push %ebp //push the old frame pointer
1: 89 e5 mov %esp,%ebp //ebp point to the old
3: 83 ec 28 sub $0x28,%esp//allocate stack space
6: 8d 45 f4 lea -0xc(%ebp),%eax//param or something??
9: 89 04 24 mov %eax,(%esp)
c: e8 00 00 00 00 call 11 <__Z7autovarv+0x11>
11: 8d 45 f4 lea -0xc(%ebp),%eax
14: 89 04 24 mov %eax,(%esp)
17: e8 00 00 00 00 call 1c <__Z7autovarv+0x1c>
1c: c9 leave
1d: c3 ret
1e: 90 nop
1f: 90 nop
所以我可以理解前 3 行,我需要一些帮助才能理解其余部分
感谢您的关注!