WinCC Outputgrößen bei Optimierung

OP #1728928
Lesenswert?
• ▲
▼
Hallo zusammen,

gestern abend (spät) viel mir auf, dass sich die Outputgrößen irgendwie 
nicht so verhalten wie ich es erwartet hätte, nämlich so:
- Ohne Optimierung: Output: 7,05kB
- mit -O/-O1 : 7,15kB
- mit -O2 : 7,64kB
- mit -O3: 7,75kB
- mit -Os: 7,63kB

Was ich nicht verstehe, ist, dass -Os so einen großen Output liefert, 
gerade im Vergleich zum nicht auf Größe optimierten Code.
Zum Anderen frag ich mich natürlich, schreib ich so miesen Code, dass er 
sich nicht optimieren lässt, oder mach ich was beim Kompilieren falsch?
Als Optionen hab ich nur das Target, -Wall und eine Optimierungsstufe. 
Und im Debug-Modus noch -g (erzeugt Debugger Symbole).

Grüße
Tobi
OP #1728948
Lesenswert?
• ▲
▼
Gerade gemerkt, dass ich im Debug-Modus kompiliert habe.
Im Releasemodus ändern sich aber nur die Zahlen um rund 3kB und die 
Reihenfolge der Outputgrößen wäre dann
-O/O1 (4,11kB)
-O2 (4,15kB)
-Os (4,16kB)
-O3 (4,22kB)
-ohne (4,37kB)

Immerhin ist der unoptimierte Output jetzt der Größte. Aber ich versteh 
immer noch nicht, warum die Größenoptimierung größeren Output erzeugt 
als die Geschwindigkeitsoptimierung. Das läuft doch dem Ziel zu wieder 
und macht -Os doch eigentlich (zumindest in dem Fall hier) überflüssig.
Persönliche Seite #1730257
Lesenswert?
• ▲
▼
Peter Dannegger schrieb:
> Versuch mal zusätzlich:
>
> -fno-inline-small-functions

hmmm, ich dachte das wäre längst in gcc? Sind nur ein paar Zeilen das.

FYI:
1
Index: avr-protos.h
2
===================================================================
3
--- avr-protos.h        (Revision 160067)
4
+++ avr-protos.h        (Arbeitskopie)
5
@@ -23,6 +23,8 @@
6

7
 extern int function_arg_regno_p (int r);
8
 extern void avr_override_options (void);
9
+extern void avr_optimization_options (int,int);
10
 extern void avr_cpu_cpp_builtins (struct cpp_reader * pfile);
11
 extern int avr_ret_register (void);
12
 extern bool class_likely_spilled_p (int c);
13
Index: avr.c
14
===================================================================
15
--- avr.c       (Revision 160067)
16
+++ avr.c       (Arbeitskopie)
17
@@ -223,6 +223,20 @@ avr_override_options (void)
18
   init_machine_status = avr_init_machine_status;
19
 }
20

21
+/* Implement `OPTIMIZATION_OPTIONS' */
22
+/* Give some reasonable optimization defaults for AVR.
23
+   These can still be overwritten by command line arguments */
24
+
25
+void
26
+avr_optimization_options (int level ATTRIBUTE_UNUSED, int size)
27
+{
28
+  if (size)
29
+    {
30
+      set_param_value ("max-inline-insns-single", 3);
31
+      set_param_value ("max-inline-insns-auto", 3);
32
+    }
33
+}
34
+
35
 /*  return register class from register number.  */
36

37
 static const enum reg_class reg_class_tab[]={
38
Index: avr.h
39
===================================================================
40
--- avr.h       (Revision 160067)
41
+++ avr.h       (Arbeitskopie)
42
@@ -125,6 +125,7 @@ extern GTY(()) section *progmem_section;
43
 #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
44

45
 #define OVERRIDE_OPTIONS avr_override_options ()
46
+#define OPTIMIZATION_OPTIONS(OPTIMIZE,OPTIMIZE_SIZE) avr_optimization_options (OPTIMIZE,OPTIMIZE_SIZE)
47

48
 #define CAN_DEBUG_WITHOUT_FP

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.