Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер struct, Вопрос 
:(
    Опции темы
comp
Дата 17.6.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.11.2006

Репутация: нет
Всего: 1



Есть вот такой вот код:
Код

struct ST {
    int i;
    char ch;
    char ch2;
};
struct ST2 {
    char ch;
    int i;
    char ch2;
};
int main() {
    ST st; ST2 st2;
    int size1 = sizeof( st );
    int size2 = sizeof( st2 );
    return 0;
}


Два вопроса:
1. Почему размеры структур отличаются, когда мы переменную i описываем между чарами(ST2) и "вне" их(ST)...
2. Почему размер ST равен 8ми байтам. Ведь, по-идее, должен равняться 6ти(int - 4, char - 1. 4 + 1 + 1 =  6). Откуда беруться лишние 2 байта?
PM MAIL   Вверх
Daevaorn
Дата 17.6.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Поиском по форуму пользовались?
Гуглом владеете?
Если нет, то http://en.wikipedia.org/wiki/Data_structure_alignment
PM MAIL WWW   Вверх
baldina
Дата 17.6.2008, 21:27 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



ну не знает человек, объясните, чего ругаться...

comp, добавь в начало #pragma pack(1) и будет как ты ожидаешь. Дело в том что по умолчанию используется выравнивание структур данных по границе машинного слова (но в принципе может быть любым). Ссылка полезная у тебя есть. Если кратко - это позволяет более эффективно использовать процессор.
PM MAIL   Вверх
vinter
Дата 17.6.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(baldina @  17.6.2008,  22:27 Найти цитируемый пост)
чего ругаться...

просто довольно частый вопрос и здесь было много раз.


--------------------
Мой блог
PM MAIL WWW   Вверх
knut
Дата 18.6.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



comp, вот посмотри сюда


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1228 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.