Есть ли путь — во многом как просмотр результата предварительной обработки с gcc -E
— видеть то, на что мои объекты похожи когда-то скомпилированный в объектные файлы?
Я говорю о GCC, но решение включая MSVC было бы прекрасно.
Вы можете осмотреть распорок дворовочных файлов и их содержимое с использованием файлов карты. Используйте / map
для Vc и -Map
или - Print-Map
для GCC.
Для скомпилированных GCC исполняемых файлов проверьте Pahole . Она покажет вам, как компилятор разместил ваши структуры/классы и есть ли в них "дыры" или нет. Дыры - это отступы из-за правил выравнивания памяти.
Ваш вопрос немного запутан.
Если вы хотите увидеть результат препроцессирования с помощью MSVC, вы можете использовать /E
, /P/
или /EP
.
В MSVC есть недокументированная возможность показать расположение структур и классов данных. Мне сейчас трудно его найти.
Объектные файлы содержат двоичные данные - единственный более высокий уровень, который может выдать большинство компиляторов, это ассемблер, так что если вы не можете прочитать, что вам не повезло. Однако, обратите внимание на этот вопрос для более подробной информации в этой области.
Конструктор - это просто другая функция (если только оно встроена). Файлы объектов содержат много информации для линкера; Таким образом, вы должны быть в состоянии найти функцию в файле .a (Имена функций будут разорваться, хотя и).
Для Visual C++:
Мне наконец-то удалось откопать (хорошо скрытые!) недокументированные флаги компилятора, которые поддерживает MSVC++, используя информацию из здесь и здесь. Вот они:
/d1reportSingleClassLayoutXXX
/d1reportAllClassLayout
(замените XXX
на имя класса)