Как отключить оптимизацию компилятора в GCC?
Я пытаюсь выучить язык ассемблера. Я искал и нашел как разобрать .c
файл, но я думаю, что он производит некоторую оптимизированную версию программы. Есть ли способ, чтобы я мог видеть точный код сборки,который соответствует моему файлу C.
5 ответов
опция gcc -O
включает различные уровни оптимизации. Использовать -O0
отключить их и использовать -S
к собранию выхода. -O3
- Это самый высокий уровень оптимизации.
начиная с gcc 4.8 уровень оптимизации -Og
доступно. Он включает оптимизации, которые не мешают отладке и является рекомендуемым значением по умолчанию для стандартного цикла редактирования-компиляции-отладки.
чтобы изменить диалект сборки на intel или att, используйте -masm=intel
или -masm=att
.
вы также можете включить некоторые оптимизации вручную с помощью -fname
.
посмотреть руководство gcc гораздо больше.
для gcc вы хотите опустить любой - O1-O2 или - O3 параметры, переданные компилятору, или если они у вас уже есть, вы можете добавить - O0 возможность отключить его снова. Это также может помочь вам добавить - g для отладки, чтобы вы могли видеть исходный и разобранный машинный код c в отладчике.
см. также:http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
используйте переключатель-O0 (- [capital o][zero]), чтобы отключить оптимизацию, и-S, чтобы получить файл сборки. Посмотри здесь чтобы увидеть больше параметров командной строки gcc.
чтобы проверить без копирования elision и увидеть, как вы копируете / перемещаете конструкторы / операторы в действии, добавьте "-fno-elide-constructors".
даже без оптимизации (- O0) GCC и Clang все равно будут копировать elision, что в некоторых случаях приводит к пропуску конструкторов копирования/перемещения. См.этот вопрос для получения подробной информации о copy elision.
однако в Clang 3.4 он вызывает ошибку (недопустимый временный объект без вызова конструктора), которая исправлена в 3.5.
вы можете отключить оптимизацию, если вы передаете -O0 с помощью командной строки gcc.
Е. Г. чтобы превратить .C файл в a .Файл звонок:
GCC-O0-s тест.c