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.
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
.
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
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.
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.
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
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