struct in einem Zug in Datei schreiben - ein schlechter Weg?



  • Hallo,

    ich habe das jetzt sehr oft hier im Forum gelesen: man schreibt structs mit einem fwrite-Aufruf in eine Datei:

    Ich hab aber festegestellt, dass dabei mehr in die Datei geschrieben wird, was auch völlig normal ist, weil der Compiler die structs padded.

    Warum macht man denn sowas?



  • Weil es einfach ist und kurzen Code bedeutet und weil viele Leute glauben, dass C ein kleine, einfach beherrschbare Programmiersprache sei und sowas dann einfach hinschreiben.
    Prinzipiell bestehen auch keine Bedenken, wenn man beim Schreiben/Lesen via fwrite/fread beachtet:
    - keine Zeiger als struct Elemente
    - gleiche Byteorder im schreibenden und lesenden Kontext sicherstellen (ebenso CHAR_BIT); hier kann man POSIX 'hton*' nutzen
    - gleiches Padding im schreibenden und lesenden Kontext sicherstellen, meistens durch (nicht standardkonform mögliches) 'packing' Szenario vieler Compiler (mit meist vernachlässigbaren Geschwindigkeitseinbußen)



  • wie funktioniert struct-packing mit gcc in verwendung mit typedef?

    typedef struct {
         unsigned int a;
         unsigned int b;
         unsigned int c;
    } abc;
    

    was muss ich tun, damit dieses struct gepackt wird?



  • ok, rausgefunden:

    typedef struct {
         unsigned int a;
         unsigned int b;
         unsigned int c;
    } __attribute__((packed)) abc;
    

    Wie ist das jetzt mit der geschwindigkeit?



  • nacccchtrag schrieb:

    ok, rausgefunden:

    typedef struct {
         unsigned int a;
         unsigned int b;
         unsigned int c;
    } __attribute__((packed)) abc;
    

    Wie ist das jetzt mit der geschwindigkeit?

    Kein Unterschied, weil da eh vorher auch kein Padding drin war.

    Aber bei sowas vielleicht.

    typedef struct {
         unsigned char a;
         /*char padding[3];*/
         unsigned int b;
    } abc;
    

    Habe keine Ahnung, wie viel das ausmacht.



  • volkard schrieb:

    Kein Unterschied, weil da eh vorher auch kein Padding drin war.

    ok, das hier war ein beispiel. ich hab ein anderes struct, das gepadded wurde.

    also wie siehts mit der geschwindigkeit bei gepackten structs aus?



  • ganz schlecht?! schrieb:

    struct in einem Zug in Datei schreiben - ein schlechter Weg?

    Nein.
    Wenn man in einem Zug sitzt und ein Laptop dabei hat, ist das völlig in Ordnung!



  • lebensberat0r schrieb:

    ganz schlecht?! schrieb:

    struct in einem Zug in Datei schreiben - ein schlechter Weg?

    Nein.
    Wenn man in einem Zug sitzt und ein Laptop dabei hat, ist das völlig in Ordnung!

    Ja, inzwischen. Das war vor 10 Jahren noch ganz anders.
    http://www.heise.de/ct/artikel/Loeschzug-286254.html


Anmelden zum Antworten