struct groesse



  • hola leute

    kann mir jemand sagen, warum folgendes struct 12 Byte gross ist ?

    struct TxlShortTime
    {
       int hour:5;
       int min:6;
       int sec:6;
       int year:19;
       int month:4;
       int day:5;
       int dayofweek:3;
       int reserved:16;
    
       inline TxlShortTime& operator=(SYSTEMTIME &t_time)
       {
          year = t_time.wYear;
          month = t_time.wMonth;
          day = t_time.wDay;
          dayofweek = t_time.wDayOfWeek;
          hour = t_time.wHour;
          min = t_time.wMinute;
          sec = t_time.wSecond;
    
          return *this;
       }
    };
    
    sollten eigendlich nur 64 bit bzw 8 byte gross sein.
    in den compilereinstellungen hab ich 4 byte ausrichtung eingestellt (BCB).
    mit sizeof(TxlShortTime) krieg ich aber immer 12 bytes angezeigt.
    
    denkfehler meinerseits ? oder was is da los ?
    
    Meep Meep
    


  • kommt darauf an wie dein compiler das uebersetzt

    bzw: sizeof wird int fo:5 also ein byte rechnen



  • hab das problem gefunden

    die bitfelder waren falsch angelegt.
    der compiler legt bitfelder nur in integer´s an.
    die muessen genau gefuerllt werden. wenn er nicht alles genau reinbringt, dann vergroessert er den benoetigten speicher.

    mit

    struct TxlShortTime
    {
       int year:19;
       int month:4;
       int dayofweek:3;
       int sec:6;
       int hour:5;
       int min:6;
       int day:5;
       int reserved:16;
       ...
    }
    

    passt es jetz

    Meep Meep



  • hier kann man auch nochmal einen blick draufwerfen:
    "Optimize your member layout"

    mfg


Anmelden zum Antworten