Hallo,
ich habe eine Frage bezüglich der KEIL-Compiler-Optimierung.
---Worum geht es---
Ich habe schon oft gelesen, dass der KEIL-Compiler mit zu den Besten
gehört in Bezug auf die Optimierungen und dass KEIL dementsprechend auch
nicht genutzte Codeteile automatisch ausgliedert.
Um mein Problem so einfach wie möglich darstellen zu können, werde ich
es anhand eines kleinen Beispiels erklären.
---Beispiel---
1 | -main.c-
|
2 | #include file1.h
|
3 | test1() //beliebige Funktion
|
4 | test2() //beliebige Funktion
|
5 | test3() //beliebige Funktion
|
6 |
|
7 | -file1.h-
|
8 | test3() //Prototyp
|
9 |
|
10 | -file1.c-
|
11 | test3() //Funktionsbeschreibung
|
Ich habe eine main.c mit diversen Funktionen. Die test3() hat den
Prototypen und die Funktionsbeschreibung in der Datei file1.h/file1.c.
Wenn ich kompiliere erstellt KEIL die *.obj und *.ist Dateien. In den
*.ist-Dateien sehe ich den Code in C und in Assembler zu jeder
Codedatei.
---Frage---
Wenn ich jetzt den Funktionsaufruf von test3() in der main.c
auskommentiere, dann werden auch automatisch die Dateien file1.h und
file1.c überflüssig, dementsprechend auch der #include-Befehl für die
file1.h.
Ich hätte gedacht, dass dann diese Codeteile jetzt in der *.ist nicht
mehr auftauchen, bzw. die test3.ist erst gar nicht erstellt wird, weil
die Codeteile darin nicht mehr benötigt werden.
Wieso wird das nicht rausoptimiert?
Sind die *.ist-Dateien überhaupt schon optimiert?
Kann man irgendwo den optimierten Code sehen?
Wirft KEIL automatisch alle Funktionen, Variablen, Definitionen, Dateien
(*.c), usw. raus, wenn diese nirgends aufgerufen werden?
Danke im Voraus!