Jak wyłączyć optymalizacje kompilatorów w gcc?

Próbuję nauczyć się języka asemblera. Szukałem i znalazłem jak zdemontować plik .c, ale wydaje mi się, że tworzy on jakąś zoptymalizowaną wersję programu. Czy jest jakiś sposób, abym mógł zobaczyć dokładny kod złożenia, który odpowiada mojemu plikowi C.

Author: gsamaras, 2011-04-23

5 answers

Opcja gcc -O umożliwia różne poziomy optymalizacji. Użyj -O0, aby je wyłączyć i użyj -S do wyjścia złożenia. {[3] } jest najwyższym poziomem optymalizacji.

Począwszy od gcc 4.8 dostępny jest poziom optymalizacji -Og. Umożliwia optymalizacje, które nie zakłócają debugowania i jest zalecaną wartością domyślną dla standardowego cyklu edycji-kompilacji-debugowania.

Aby zmienić dialekt zespołu na intel lub att użyj -masm=intel lub -masm=att.

Możesz włącz również pewne optymalizacje ręcznie za pomocą -fname.

[[8]} zajrzyj do podręcznika gcc , aby dowiedzieć się więcej.
 80
Author: pmr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 08:55:13

Dla gcc chcesz pominąć dowolne opcje -O1-O2 lub -O3 przekazane kompilatorowi lub jeśli już je posiadasz, możesz dodać opcję -o0, aby ją ponownie wyłączyć. Może również pomóc Ci dodać -g do debugowania, aby zobaczyć źródło c i zdemontowany kod maszynowy w Twoim debuggerze.

Zobacz też: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html

 7
Author: IanNorton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-23 18:02:53

Użyj przełącznika -o0 (- [capital o] [zero]), aby wyłączyć optymalizację, i -S, aby uzyskać plik assembly. Spójrz tutaj {[2] } aby zobaczyć więcej opcji wiersza poleceń gcc.

 6
Author: MByD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 05:08:15

Aby przetestować bez kopiowania elision i zobaczyć, jak kopiujesz/przesuwasz konstruktory / operatory w akcji Dodaj "- fno-elide-constructors".

Nawet bez optymalizacji (-O0 ), GCC i Clang nadal będą wykonywać copy elision, co w niektórych przypadkach powoduje pomijanie konstruktorów copy/move. Zobacz to pytanie Aby uzyskać szczegóły dotyczące copy elision.

Jednak w Clang 3.4 wywołuje Błąd (Nieprawidłowy obiekt tymczasowy bez wywołania konstruktora), który został naprawiony w 3.5.

 4
Author: user3770818,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:54

Możesz wyłączyć optymalizacje, jeśli podasz -O0 z wiersza poleceń gcc.

Np. aby włączyć a .Plik C do a .Wywołanie Pliku S:

GCC-o0-s test.c

 1
Author: Nils Pipenbrinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-23 18:02:23