глобальные dtors aux и глобальные ctors aux

Я разобрал простую программу, написанную на C++ , и есть эти два имени функций. Я предполагаю, что ctor означает конструктор, а dtor-деструктор, а слово global может означать, что они создают и уничтожают глобальные объекты. Я не могу угадать имя ОКС. Что делают эти две функции?

2 ответов


адреса строителей и деструкторы статических объектов хранятся в разных разделах в исполняемый файл ELF. для конструкторов существует раздел под названием .CTORS и для деструкторов есть .DTORS.

компилятор создает две вспомогательные функции _ _ do _ global _ ctors _ aux и _ _ do _ global_dtors _ aux для вызова конструкторов и деструкторы этих статических объектов, соответственно.

_ _ do _ global _ ctors _ aux функция просто выполняет прогулку по .CTORS раздел, в то время как _ _ do _ global_dtors _ aux делает ту же работу только в .DTORS раздел, содержащий заданные программой функции деструкторов.


они являются вспомогательными функциями, добавленными компилятором для создания и уничтожения статических объектов.

например

std::vector<int> some_global;

int main() { return 0; }

some_global должен быть фактически построен (и разрушен) где-то, и C++ гарантирует, что построение произойдет до main. Один из способов сделать это-испустить функцию, которая происходит до main, который создает глобальные объекты, и другую функцию, которая происходит после main чтобы уничтожить их.

если вы застряли в точке останова внутри std::vector конструктор и запустил эту программу, трассировка стека покажет вам функцию, из которой она была инициализирована.