Forum: Mikrocontroller und Digitale Elektronik Sehr große Headerdatei


von joli (Gast)


Lesenswert?

Hi,
habe ein C-Projekt bei dem ein Headerfile 1.2MB groß ist. Wieso ist die 
Binärdatei nach dem Compiliervorgang aber nichtmal so groß wie diese 
eine Headerdatei?

von Sascha (Gast)


Lesenswert?

Weil da (praktisch) kein ausführbarer Code drin ist, nur Deklarationen 
und sowas. Infos für den Compiler, die nicht direkt im Executable 
landen.

von Peter II (Gast)


Lesenswert?

weil 1,2MB kommentare in der header datei sind.

von Sven P. (Gast)


Lesenswert?

Weil eine Headerdatei in einem sauber (bzw. klassisch) strukturierten 
Projekt keinen Beitrag zum Speicherverbrauch liefert. Denn die 
Headerdatei enthält nur Deklarationen (und keine Definitionen), und 
die brauchen keinen Speicher.

C-Buch...

von Stefan P. (form)


Lesenswert?

Warscheinlich sind da auch viele Daten in Hex-Schreibweise drin, das 
kann schonmal um Faktor 5-6 aufblähen alleine durch die Schreibweise.

von joli (Gast)


Lesenswert?

die antworten kommen ja super schnell reingeflogen :) Im Binärfile steht 
doch aber auch sowas wie Deklarationen von RAM-Variablen etc. oder 
nicht?

von Noname (Gast)


Lesenswert?

Das ist ein Missverständnis:

Der Begriff "Deklarationen" bezieht sich auf den Quellcode. Es gibt 
keinen Grund warum Deklarationen noch in dem Kompilat enhalten sein 
sollten.

von Peter II (Gast)


Lesenswert?

joli schrieb:
> Im Binärfile steht
> doch aber auch sowas wie Deklarationen von RAM-Variablen etc. oder
> nicht?
nein, es stehen keine namen von Variablen drin.

Sven P. schrieb:
> Weil eine Headerdatei in einem sauber (bzw. klassisch) strukturierten
> Projekt keinen Beitrag zum Speicherverbrauch liefert.
das stimmt so aber nicht.

#define Text1 "Das ist ein Text"

dies hat eine diekte auswirkung auf die größe vom Binary file (wenn auch 
das define verwendet wird) und das ist sehr wohl eine saubere 
Programmierung.

von Fuenf Tassen (Gast)


Lesenswert?

Nein, natuerlich nicht. Die Cpu kennt keine Datentypen, nur 
unstruktionen

von Sven P. (Gast)


Lesenswert?

Peter II schrieb:
> joli schrieb:
>> Im Binärfile steht
>> doch aber auch sowas wie Deklarationen von RAM-Variablen etc. oder
>> nicht?
> nein, es stehen keine namen von Variablen drin.
Das stimmt so nicht. Im Kompilat können sehr wohl Symbole enthalten 
sein, etwa Debugging-Symbole. Üblicherweise strippt man die aber oder 
sie gehen automatisch ab, wenn man die zum Brennen nötigen Sektionen 
extrahiert.

Manchmal bleiben die Symbole aber auch drin, etwa wenn dynamisch gelinkt 
werden soll.


> Sven P. schrieb:
>> Weil eine Headerdatei in einem sauber (bzw. klassisch) strukturierten
>> Projekt keinen Beitrag zum Speicherverbrauch liefert.
> das stimmt so aber nicht.
>
> #define Text1 "Das ist ein Text"
>
> dies hat eine diekte auswirkung auf die größe vom Binary file (wenn auch
> das define verwendet wird) und das ist sehr wohl eine saubere
> Programmierung.
Nein, hat es nicht. Es hat garkeine Auswirkung auf die Größe des 
Kompilates.

von Peter II (Gast)


Lesenswert?

Sven P. schrieb:
> Nein, hat es nicht. Es hat garkeine Auswirkung auf die Größe des
> Kompilates.

klar wenn der text länger wird, wird auch die binary datei größer. Oder 
Was glaubst du wo der Text gespeichert wird?

von Sven P. (Gast)


Lesenswert?

Peter II schrieb:
> Sven P. schrieb:
>> Nein, hat es nicht. Es hat garkeine Auswirkung auf die Größe des
>> Kompilates.
>
> klar wenn der text länger wird, wird auch die binary datei größer. Oder
> Was glaubst du wo der Text gespeichert wird?
Nirgendwo, das ist ja der Knackpunkt. Du kannst beliebig viel Text und 
Daten in irgendwelche Präprozessor-Konstanten (#define) verpacken und es 
wird effektiv keine Auswirkung auf das Kompilat haben.

von Peter II (Gast)


Lesenswert?

Sven P. schrieb:
> Nirgendwo, das ist ja der Knackpunkt. Du kannst beliebig viel Text und
> Daten in irgendwelche Präprozessor-Konstanten (#define) verpacken und es
> wird effektiv keine Auswirkung auf das Kompilat haben.

ich habe geschrieben wenn das define auch verwendet wird.

header:
#define TEXT "Das ist ein Text"

c quelle
print( TEXT );


dann hat die headerdatei auswirkung auf die codegröße.

von Sven P. (Gast)


Lesenswert?

Da könnte man jetzt prima Haare spalten...

Aber gut, im einfachsten Fall hast du ja Recht.

von Peter D. (peda)


Lesenswert?

Eine Header-Datei erzeugt genau 0 Byte Code und verbraucht genau 0 Byte 
RAM.
Sie macht ja nur Funktionen oder Variablen für den Compiler bekannt.

Erst das C-File oder eine Lib braucht wirklich Resourcen.


Peter

von Peter II (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Eine Header-Datei erzeugt genau 0 Byte Code und verbraucht genau 0 Byte
> RAM.

richtig, aber sie kann auswirkung auf die größe der erzeugten binary 
datei haben. Einfachste fall ist wenn man eine variable von uint8 auf 
uint32 ändert.

von Sven P. (Gast)


Lesenswert?

Peter II schrieb:
> Peter Dannegger schrieb:
>> Eine Header-Datei erzeugt genau 0 Byte Code und verbraucht genau 0 Byte
>> RAM.
>
> richtig, aber sie kann auswirkung auf die größe der erzeugten binary
> datei haben. Einfachste fall ist wenn man eine variable von uint8 auf
> uint32 ändert.
Jetzt reitest du dich wieder rein.

Der Speicher für die Variable wird (klassisch) in der C-Quelldatei 
reserviert, und zwar durch die Definition der Variablen mit einem Typ.

Im Header steht bestenfalls noch eine Deklaration für diese Variable, 
und zwar mit dem 'extern'-Schlüsselwort. Die braucht keinen Speicher, 
und wenn sie im Widerspruch zu irgendeiner Definition steht, gibt es 
eine Fehlermeldung.

von Peter II (Gast)


Lesenswert?

Sven P. schrieb:
> Jetzt reitest du dich wieder rein.
> Der Speicher für die Variable wird (klassisch) in der C-Quelldatei
> reserviert, und zwar durch die Definition der Variablen mit einem Typ.

nein, wenn es eine stuct ist und diese in verschienden c datein 
verwendet wird, dann hat das sehr wohl eine auswirkung auf die 
codegröße.

bei MS gibt es z.b auch defines in der form MAX_PATH_LEN und im code hat 
man dann etwas stehen wie

char x[MAX_PATH_LEN]

und damit hat auch wieder die header datei eine direkte auswirkung auf 
die codegröße.

von Sven P. (Gast)


Lesenswert?

Das hatten wir ja eben schon, ja, im einfachsten Fall hast du da Recht.

Ich möchte da nicht Haare spalten, ich weiß ja was du meinst. Ich habe 
einen Professor, der bringt das in so einer Situation sehr treffend auf 
den Punkt: "Ich könnte jetzt einfach 'ja' sagen, aber.." :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.