我寫了一個簡單的C++程序與定義的類象下面這樣:(試驗是在x86 32位Linux的使用g ++ 4.6.3)爲什麼在g ++生成的彙編代碼中定義這樣的構造函數/析構函數?
#include <iostream>
using namespace std;
class Computer
{
public:
Computer();
~Computer();
};
Computer::Computer()
{
}
Computer::~Computer()
{
}
int main()
{
Computer compute;
return 0;
}
當我使用g++
產生ctors
和dtors
,我得到這些定義在.ctors
的末尾。
.globl _ZN8ComputerC1Ev
.set _ZN8ComputerC1Ev,_ZN8ComputerC2Ev
.globl _ZN8ComputerD1Ev
.set _ZN8ComputerD1Ev,_ZN8ComputerD2Ev
挖掘到生成的彙編代碼後,我想通了,_ZN8ComputerC1Ev
應該類Computer
被構造時所使用的函數名,而_ZN8ComputerC2Ev
是類Computer
的構造的名稱。同樣的事情發生在Computer
的析構函數聲明和調用中。
看來,建立了一個表鏈接構造函數及其實現。
所以我的問題是:
實際上是什麼這個構造函數/析構函數的信息?
我在哪裏可以找到它們的
ELF
格式?
我甩相關.ctors
和.init_array
部分,但我就是無法找到_ZN8ComputerC1Ev
和_ZN8ComputerC2Ev
之間形成的關係的元數據...