【发布时间】:2014-09-26 03:54:25
【问题描述】:
我编写了一个简单的 C++ 程序,它定义了一个如下所示的类:
#include <iostream>
using namespace std;
class Computer
{
public:
Computer();
~Computer();
};
Computer::Computer()
{
}
Computer::~Computer()
{
}
int main()
{
Computer compute;
return 0;
}
当我使用g++(Test is on x86 32bit Linux with g++ 4.6.3.)生成ctors和dtors时,我在.ctors部分的末尾得到这些定义。
.globl _ZN8ComputerC1Ev
.set _ZN8ComputerC1Ev,_ZN8ComputerC2Ev
.globl _ZN8ComputerD1Ev
.set _ZN8ComputerD1Ev,_ZN8ComputerD2Ev
在深入研究生成的汇编代码后,我发现_ZN8ComputerC1Ev应该是构造Computer类时使用的函数名,而_ZN8ComputerC2Ev是类Computer的构造函数的名称。同样的事情发生在Computer的析构函数声明和调用中。
似乎构建了一个表,将构造函数及其实现链接起来。
所以我的问题是:
这个构造函数/析构函数信息究竟是干什么用的?
在哪里可以找到
ELF格式的它们?
我转储了相关的.ctors 和.init_array 部分,但我找不到定义_ZN8ComputerC1Ev 和_ZN8ComputerC2Ev 之间关系的元数据...
【问题讨论】: