Einfaches Struct ??????



  • Ich versteh garnix mehr...ich glaub echt mein Compiler will mich verarschen!

    2 Structs:

    struct test
    {
    char t;
    char z;
    char u;
    };

    Quizfrage: Wie viel Speicher wird benötigt für einen solchen Datentyp ? Richtig 3 byte.....

    class test
    {
    char t;
    char z;
    short a;
    char u;
    };

    Und jetzt das Selbe mit diesem Datentyp...sizeof sagt 6 ???????? Geht's noch, oder bin ich zu blöd ?

    kann mir das mal einer erklären ?



  • class test
    {
            char t;//size 1 align 1
            char z;//size 1 align 1
            short a;//size 2 align 2
            char u;//size 1 align 1
            char invisiblePadding;//vom compiler hinzugefügt, damit im array of test
    //der short immer auf einer geraden adresse landet, da ist der 
    //zugriff schneller. 
    };
    

    Quizfrage 1: sag die size

    class test
    {
      char a;
      double b;
      char c;
      short d;
    }
    

    Quizfrage 2: sag die size

    class test
    {
      double b;
      char a;
      char c;
      short d;
    }
    


  • Hi Volkard.
    Danke für die schnelle Antwort 🙂

    Schön ung gut, wenn der Zugriff da schneller ist. Aber was wenn man damit nix anfangen kann ?...
    Ich hab ne großes Array im Binärformat vorliegen...und auf die wollt ich jetzt einfach Strukturen drauflegen damit ich die Daten einfach einlesen kann.
    Wie mach ich dass nun wenn der Compiler mir die Kaputtoptimiert? Hab grad gemerkt wenn ich des das Data Alignment auf Byte stell gehts. Aber das muss man doch auch auf Codeebene lösen können??

    Wie kommt denn eigentlich des Ergebnis aus deinen Beispielen zustande ?...is ja noch schlimmer!



  • axos schrieb:

    Aber das muss man doch auch auf Codeebene lösen können?

    Es geht nicht auf C++-Ebene.
    Kenne Deinen Compiler da zu wenig.

    Aber vielleicht so:

    //von http://edn.embarcadero.com/article/29631
    #pragma pack (push,1)
    struct test
    {
       char a;
       short b;
    //use
    };
    #pragma pack(pop)
    


  • Oh mann...immer des scheiß optimierte zeug. Da lob ich mir den guten alten Assembler...da kommt sowas net vor 😛 Und man weiss noch was seine Maschine macht...

    Naja...werds nachher mal versuchen, ob's mit dem pragma geht..
    Vielen dank auf jeden fall



  • axos schrieb:

    Oh mann...immer des scheiß optimierte zeug. Da lob ich mir den guten alten Assembler...da kommt sowas net vor 😛 Und man weiss noch was seine Maschine macht...

    Naja...werds nachher mal versuchen, ob's mit dem pragma geht..
    Vielen dank auf jeden fall

    Das hat nix mit Scheißoptimierung zu tun. Der Intelprozessor benötigt halt zwei Buszugriffe, um auf eine Integervariable an einer ungeraden Adresse zuzugreifen. Andere (z.B. Motorola MC 680x0) werfen sogar das Handtuch.

    Es gibt auch einen Schalter in der GUI:
    Project -> Options -> Advanced Compiler -> Data Alignment

    mfg Martin



  • @mgaeckler.
    Klar hat das was mit Optimierung zu tun...wärs net so optimiert worden, hätts funktioniert und ich hätt mich die 2 Stunden suche erspart...

    Des Data Alignment hab ich wie gesagt schon gefunden.
    Ohoh...man erkennt ja schon die Entwicklung...Der Compiler unterstützt ja nichmal mehr ne Größenoptimierung sonder nur noch "Speed"...Naja. Auf jeden fall danke für die Hilfe.



  • axos schrieb:

    Klar hat das was mit Optimierung zu tun...wärs net so optimiert worden, hätts funktioniert und ich hätt mich die 2 Stunden suche erspart...

    Warum interessiert dich, wie groß eine Datenstruktur im Speicher ist?

    axos schrieb:

    Ohoh...man erkennt ja schon die Entwicklung...

    Früher war alles besser, nicht? 😉



  • axos schrieb:

    Ohoh...man erkennt ja schon die Entwicklung...Der Compiler unterstützt ja nichmal mehr ne Größenoptimierung sonder nur noch "Speed"...Naja. Auf jeden fall danke für die Hilfe.

    Falsch. Kannst doch mit dem #pragma einstellen, was Du magst. Insbesondere Speed halten und nur bei Deiner Frickel-Struktur auf Speicher gehen.

    Nur ist halt die Standardeinstellung auf Speed. Und das ist auch genau das, was ich bevorzuge. Meine 2G RAM sind heutzutage sehr wenig und ich kriege sie nicht voll. Die Platte ist nur zu 15% belegt (abnehmend). Aber warten tue ich auf den Rechner dauernd.



  • audacia schrieb:

    Warum interessiert dich, wie groß eine Datenstruktur im Speicher ist?

    Wie gesagt, weil ich ne Datei einlesen möchte, die Eine struktur in der Form enthält und wenn der Compiler mir da reinpfuscht, passt einfach nix mehr.

    audacia schrieb:

    Früher war alles besser, nicht? 😉

    Ja wars...Da war auch die Luft noch sauber und der Sex schmutzig...und heut is einfach alles anders selbst ein Programmierer hat nix mehr unter Kontrolle...

    Und noch was die Tolle "Antispam Rechnung" (beim schreiben von beiträgen) oder was des sein soll is lächerlich...des lässt sich ja durch nen 1 Zeiler umgehen 😃 Aber immernoch besser als immer die scheiß Bilder die man nicht entziffern kann 😛



  • volkard schrieb:

    Nur ist halt die Standardeinstellung auf Speed. Und das ist auch genau das, was ich bevorzuge. Meine 2G RAM sind heutzutage sehr wenig und ich kriege sie nicht voll. Die Platte ist nur zu 15% belegt (abnehmend). Aber warten tue ich auf den Rechner dauernd.

    Jaja, hast ja recht...Aber des warten is doch meist eh Hardware (Festplatte oder sonst ne peripherie auf die gewartet wird(und nicht vom Prozessor)) abhängig. Da muss ich mein "Früher war alles besser" doch bissle zurück nehmen. Kauf dir ne SSD (falls du keine hast) und Windows 7. Hat viel mehr gebracht als der umstieg von Dual auf Quad. Seit dem läuft mein PC mega viel besser ! Word öffnet braucht keine 2 Sekunden zum öffnen...die meisten Wartezeiten kommen da fast nur noch von irgendwelchen Timern...dass man den Splash überhapt noch sieht (zumindest bei einfachen Anwendungen).


Anmelden zum Antworten