Struct-Padding Sinn?



  • DirkB schrieb:

    Da die modernen CPUs mit mehr als 8 Bit gleichzeitig auf den Speicher zugreifen, ist es natürlich besser, wenn man die Bytes schon richtig geordnet im Speicher vorliegen.
    Deswegen werden 16 Bit Werte meist auf gerade Adressen gelegt, 32-Bit Werte auf durch 4 teilbare Adressen ...

    Es gibt auch Architekturen, die es nicht anders zulassen und der Compiler dann die Bytes ordnen muss.

    sizeof(struct) liefert schon die richtige Größe. Es ist halt nicht die Summe der Einzelwerte.

    Wenn du bis jetzt noch nichts festgestellt hast, hast du noch nicht viel gemacht.

    ja, aber ich nutze die structs, um einfacher in dateien zu schreiben, d.h ich erstelle ein struct, weiße alles zu und dann schreibe ich das gesamte struct mittels
    fwrite(&struct,sizeof(struct),1,Datei);
    in die datei. da fallen die füllbytes sofort auf, weil dann eben die dateistruktur nicht mehr stimmt.



  • p.s.: gäbs da vielleicht eine alternative?



  • struct-padding schrieb:

    der sinn und zweck eines structs ist halt, dass ich z.b. inhalte aus dateien strukturiert einlesen oder schreiben kann.

    Wie kommst du denn darauf?

    struct-padding schrieb:

    p.s.: gäbs da vielleicht eine alternative?

    Ja, die Elemente einzeln und korrekt reinschreiben.



  • TyRoXx schrieb:

    struct-padding schrieb:

    der sinn und zweck eines structs ist halt, dass ich z.b. inhalte aus dateien strukturiert einlesen oder schreiben kann.

    Wie kommst du denn darauf?

    struct-padding schrieb:

    p.s.: gäbs da vielleicht eine alternative?

    Ja, die Elemente einzeln und korrekt reinschreiben.

    naja, weil "struct" die abkürzung von "structure" ist? für was soll das sonst gut sein?

    und nein, ich werde jetzt bestimmt nicht 30 fwrite() machen...



  • struct-padding schrieb:

    naja, weil "struct" die abkürzung von "structure" ist? für was soll das sonst gut sein?

    Verschiedene Variablen in einer Variablen zu bündeln, damit man sie als ganzes herumreichen kann. Von einem bestimmten Speicherlayout ist dabei nicht die Rede.

    und nein, ich werde jetzt bestimmt nicht 30 fwrite() machen...

    Bei portablem Code müsstest du das.



  • struct-padding schrieb:

    naja, weil "struct" die abkürzung von "structure" ist? für was soll das sonst gut sein?

    und nein, ich werde jetzt bestimmt nicht 30 fwrite() machen...

    Ich vermute mal, Du kommst aus der IBM (?) Mainframe Welt. Dort sind solche "Structs" also Strukturen zum "Weiterreichen", resp als Datensatz durchaus üblich.

    Wenn es denn so ist, wird es bei Dir noch viele "Tränen" - zum einen vom Lachen, zum anderen vom Weinen geben, wenn Du erkennst, wie die Bill Gates Informatik Dinge gelöst hat, die es schon vor 50 Jahren (besser) gab....

    Viel Spass dabei! 😉



  • Was hat denn die struct aus C mit Bill Gates zu tun?

    C wurde 1972 vorgestellt.
    Microsoft ist von 1975. Und damals gabs von denen ein (Q-)DOS.



  • DirkB schrieb:

    Was hat denn die struct aus C mit Bill Gates zu tun?

    C wurde 1972 vorgestellt.
    Microsoft ist von 1975. Und damals gabs von denen ein (Q-)DOS.

    Was das mit Bill Gates zu tun hat???

    Sehr einfach:

    C wurde durch K&R im Unix Umfeld entwickelt. Wenn es dort geblieben wäre, wäre das ja auch in Ordnung.
    Bill Gates nun hat durch seine agressive Geschäftspolitik (mehrere Milliarden Strafzahlungen und Vergleichszahlungen) eine Art Kinder-IT etabliert, die mit einer seriösen IT nicht viel zu tun hat.
    Ich nenne ein Beispiel (das hat jetzt nichts mit C zu tun):
    Wenn auf einer MS SQL Datenbank automatisch ein INSERT in einen UPDATE mündet oder umgekehrt wird es mir eigentlich nur schlecht.
    MS (Bill Gates) hat aber nicht nur bei Datenbanken Mist gebaut, sondern auch durch die Favorisierung untauglicher Prozessoren wie mit INTEL die IT zerstört... Naja mit Marktmacht durch Korruption kann man das ja machen.

    Im Moment freue ich mich über diesen Boom mit IPADs, IPHONEs und was es da sonst noch für einen Mist gibt. Es wäre schön gewesen, wenn es das schon vor 20 Jahren gegeben hätte, damit sich Kinder-IT nicht mit professioneller IT vermischt.

    Ich behaupte, Bill Gates hat die IT 20 Jahre ausgebremst

    Und jetzt komme ich zu der STRUCT Geschichte:
    Bei Mainframes herrscht tatsächlich eine Datenkonsistenz. Das heisst ich fülle die Structfelder mit Werten und weiss, dass diese ohne Paddings aneinanderliegen und kann dann eine so gefüllte Struktur als Datensatz wegschreiben.

    Eigentlich nicht schlecht - oder? 😋



  • Ein vergleichsweise interessanter Troll 🙂



  • Tim schrieb:

    Ein vergleichsweise interessanter Troll 🙂

    Findest du? Lies lieber "Worse is better" oder das "Unix Haters' Handbook", die haben wenigstens innere Logik lassen Bill Gates aus dem Spiel. Der hat genug eigenen Mist verbrochen und sollte nicht für /alles/ herhalten müssen.



  • Aber der hier ist so wunderbar wirr 🙂



  • Wer gerne mit festen Structs arbeiten will wie auf dem Mainframe (so wie ich), der kann ja auch problemlos Opencobol verwenden (wie auf dem Mainframe).
    Ich mußte hier auch bei C viel !!! umdenken und neu lernen.


Anmelden zum Antworten