глобальные 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
конструктор и запустил эту программу, трассировка стека покажет вам функцию, из которой она была инициализирована.