Почему в ассемблерном листинге gcc нет тела деструктора [complete object destructor]? Как его находит линкер?

При компиляции программы на языке C++ компилятор gcc генерирует ассемблерный код, который представляет собой промежуточный код между высокоуровневым и машинным языками. В ассемблерном листинге gcc нет явного тела деструктора (complete object destructor) потому, что деструкторы в языке C++ выполняются автоматически в конце блока или функции, где создан объект. Таким образом, в ассемблерном коде деструктор представлен вызовом кода, который будет исполнен в нужном месте. Тело деструктора представлено в исходном коде программы и компилятор преобразует его в соответствующий ассемблерный код.

Нахождение и связывание вызовов деструктора осуществляется линкером. Линкер — это программное обеспечение, которое соединяет различные объектные файлы и библиотеки вместе для создания исполняемого файла. Во время связывания, линкер находит все вызовы деструктора в ассемблерном коде и создает соответствующие ссылки на соответствующее тело деструктора, которое находится в других объектных файлах или библиотеках. Это происходит посредством создания таблицы символов, которая содержит информацию о всех функциях и переменных в программе. Линкер использует эту таблицу символов для найти и связать все необходимые вызовы деструктора с соответствующим телом деструктора.

Таким образом, хотя тело деструктора не представлено непосредственно в ассемблерном листинге gcc, оно находится и связывается линкером в процессе создания исполняемого файла.