Чтобы точно понять, что происходит «под капотом» при написании C ++, какие документы вы бы порекомендовали?
Пока что у меня есть:
Книги:
Для того, чтобы по-настоящему понять, вы должны быть знакомы с исходным кодом G ++. Код компилятора расскажет вам многое о языке.
Для более низкого уровня понимания вы должны быть знакомы с последним стандартом C ++ (C ++ 11).
Я узнал, сначала изучив набор инструкций по сборке x86 и тайминги команд. Как только вы это узнаете, вы узнаете, во что на самом деле компилятор преобразует ваш код, и вы получите представление о том, что он может и чего не может делать. Оттуда, если бы меня интересовал конкретный кусок кода, я бы получил вывод на ассемблере от компилятора и экспериментировал с различными способами его кодирования. За эти годы я обнаружил несколько вещей … 1) компиляторы довольно хорошо оптимизируют, часто даже с кодированием чего-то несколькими различными способами, заканчивающимися одинаковым выводом сборки, 2) я часто удивляюсь, насколько много встраивания компилятор делает, и 3) Я часто удивляюсь тому, как иногда маленький кусочек кода C ++ приводит к огромному количеству выходных данных сборки. Поэтому, когда вы копируете несколько объектов наследования C ++, вы понимаете, насколько это дорого, и когда вы пишете небольшие служебные методы для защиты данных объекта, вы понимаете, насколько дорогим может быть этот инструмент. Хорошей охоты.
Используйте компиляцию для ассемблера: g++ -fverbose-asm -S
в случае GCC и родственных переключателей в других компиляторах. Это настолько близко к «под капотом», насколько это возможно.