размер Struct...

Тема в разделе "Общие вопросы по С и С++", создана пользователем debug, 25 май 2006.

Статус темы:
Закрыта.
  1. debug

    debug Гость

    Разъясните мне пожалуста, что пишет компилятор С++ и С
    при создании структуры в первые два её байта?
    Ну к примеру есть некая структура:

    struct MMM {
    short i;
    char a;
    short g;
    } mmm;

    Вручную размер подсчитать запросто - это 5 байт. Однако sizeof MMM выдаст 7.
    Причём как компилер Borland так и Microsoft.
    debug
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    ничего он туда не пишет, а дополнительные байты появляются из-за выравнивания.

    Используя следующий код ставим выравнивание по границе байта и получаем законные 5 байтов
    #pragma pack(push,1)
    struct MMM {
    short i;
    char a;
    short g;
    } mmm;
    #pragma pack(pop)
     
  3. debug

    debug Гость

    Ещё один вопрос начинающего, вот код
    Но результаты почему то не такие, какие ожидаются мной :)

    struct SIGNAL_STATUS {
    char status_t;
    unsigned short gNumber;
    unsigned char sNumber;
    unsigned short info;
    unsigned short panel;
    };

    char temp[16];
    memset(temp, 0, 16);
    temp[0]=0x14;
    temp[1]=0;
    temp[2]=0x01;
    temp[3]=0x01;
    temp[4]=0;
    temp[5]=0;
    temp[6]=0;
    temp[7]=0x01;
    SIGNAL_STATUS *sg=(SIGNAL_STATUS*)temp;
    sg->status_t;
    sg->gNumber;
    sg->sNumber;
    sg->info;
    sg->panel;
    Результаты:

    sg->status_t=14
    sg->gNumber=257
    sg->sNumber=0
    sg->info=256
    sg->panel=0

    Почему так? Это тоже из-за выравнивания или это похоже на сетевой порядок байт.
     
  4. 62316e

    62316e Гость

    Дык. А каких результатов ты ожыдал?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей