Compiler und Text

lano

Mitglied
Moin.

optimiert ein Kompiler eigentlich auch die Text Strings ?

static char * hw = "Hallo Welt";

sowas zB ?
 

german

Aktives Mitglied
devCommunity-Experte
Nee. Was soll er denn optimieren? Das ist ein Literal.
Wird vielleicht rausgeschmissen, wenn hw nirgends im Code verwendet wird, das ist aber schon so ziemlich alles was möglich ist.
 

lano

Mitglied
Hmmm... Ich hatte jetzt gehofft wenn ich davon mehrere habe das er das komprimiert.
 

german

Aktives Mitglied
devCommunity-Experte
Nee. Machen wir mal ein Gedankenspiel. Ich schreib mal dein "Hallo Welt" inclusive Nullterminierung in HEX
1589493524330.png

Dort wo der String gebraucht wird, wird er einfach referenziert und fertig.

So, nun ist dein Ansatz, hey ich sehe da 3x 6C alias 'l'. Das muss man doch optimieren können. Also lassen wir den Compiler mal eine Struktur bauen (wie sie wegen Alignment vermutlich nie existieren wird, aber egal). Der Spaß muss ja anschließend in den Binärcode kommen, also baue ich alles schön konsekutiv im Speicher auf. Könnte dann so aussehen.
1589493948556.png

Anzahl Zeichen oder Positionen in einem String können so viele werden, wie in einem String vorkommen können. Also müssen sie in einem ausreichend breiten numerischen Typ hinterlegt werden. Bei mir sind das 8 Byes (wie size_t auf einem 64 Bit System). Und schon werden aus den ursprünglichen 11 Bytes mal eben 169. Und weil das noch nicht genug ist, muss der Compiler nun noch Code bauen, um aus diesem Quatsch wieder einen nullterminierten String von 11 Bytes machen zu können...
 

lano

Mitglied
Und schon werden aus den ursprünglichen 11 Bytes mal eben 169. Und weil das noch nicht genug ist, muss der Compiler nun noch Code bauen, um aus diesem Quatsch wieder einen nullterminierten String von 11 Bytes machen zu können...
Ja Ok überredet. Seh ich ein. Aber wenn man wirklich viel text hat würde es sich wieder lohnen *duck* :)
Aber stimmt schon, ich würde auch nicht wollen das mir der compiler nen zipper in mein code einbaut.
Ja war ne doofe idee...
 

Lowl3v3l

Mitglied
devCommunity-Experte
Wenn du wirklich viel Text in dein Programm reinkompilierst machst du schon fundamental was falsch ;)
 

Lowl3v3l

Mitglied
devCommunity-Experte
Was genau spricht dann dagegen, sowas als extra resource, zum Beispiel als Plaintext(vom Programm gelesen) oder noch besser manpage irgendwo zu hinterlegen? Das klingt für mich nach einem Designproblem, denn es klingt so, als würde da ein Programm viele verschiedene Dinge machen(besser ist es, sich da an die UNIX-Philosophie zu halten), die wenigsten monolithischen Programme( die eine Ausnahme die mir einfällt wären Compiler und ähnliche Tools) sollten überhaupt so viele Optionen anbieten, oft ist es dann eine gute Idee, sie aufzuspalten und ggf. einen weiteren zentralen "driver" zu schreiben.

Ich kann das natürlich nicht ultimativ beurteilen, und das ist ein kompletter Schuss ins Blaue, aber ich denke es würde sich lohnen, es daraufhin mal zu untersuchen und ggf. aufzusplitten, wenn du kannst.

mfg,
Lowl3v3l
 

lano

Mitglied
aber ich denke es würde sich lohnen, es daraufhin mal zu untersuchen und ggf. aufzusplitten, wenn du kannst.
Hab ich doch. Ich beurteile das aber anders. ob ein programm sollte oder nicht ist für mich zweitrangig. Hier gings mir um was kann ich danach mit dem Programm machen. Da ist das so für mich die beste lösung. warum sollte ich ein programm schreiben dessen bedienung sich für mich, ich sach mal komisch anfühlt. macht für mich keinen sinn. Klar die Länge der Kommandozeile ist begrenzt, aber für mein vorhaben lang genug.

zum Beispiel als Plaintext(vom Programm gelesen) oder noch besser manpage irgendwo zu hinterlegen?
Manpage gibt es auch. Plaintext lesen ist für ne hilfe seite, ich könnt ja auch mein markdown parsen, nicht mein style.
 

Lowl3v3l

Mitglied
devCommunity-Experte
Selbst Poettering ist mittlerweile drauf gekommen, dass alles in einem Programm haben keine so geile Idee ist ;)
 
Oben Unten