| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Занимает пмаяти прога больше чем надо |
| Автор: gepard 14.6.2004, 07:48 | ||||
Появится две строчки:
Как так? Куда память утекает? |
| Автор: chipset 14.6.2004, 08:00 |
| а сама структура разве не учитывается? |
| Автор: bel_nikita 14.6.2004, 08:32 | ||
| gepard Дык, а про выравнивание забыл?
Вот теперь проверь |
| Автор: gepard 14.6.2004, 09:57 | ||
chipset
1 b, но никак не 6. bel_nikita Блин, вот что значит кодить в 1 ночи До этого сидел листал посты с форума и видел тему про выравнивание. Почитал же ещё! Всё, пора завязывать Кстати, а что творит это выравнивание? Как определить, когда его надо использовать(кроме проверки на размер структуры, конечно ) |
| Автор: bel_nikita 14.6.2004, 10:47 | ||||||
gepard
Очень просто. Стандартно граница выравнивания стоит в 8 байт. Вообще-то это доку к компилеру смотреть надо. Там такие вещи обязательно пишут. Так, вот, если ты используешь структуры или классы в которых есть типы меньше 8 байт, то надо выравнивать. Хотя не обязательно. Это смотря для чего используется структура. Например, если ты некий класс или структуру проецируешь на память. Ну или, например чтение с файла. Ты знаешь, что данные в файле записаны в виде cls . Тебе надо их считать. Так вот, если у тебя выравнивание в 8 байт, то будут траблы Рано или поздно у всех такие проблемы возникают. И довольно часто задаются вопросы по этому поводу. Только вот в FAQ этого почему-то нет Вот, два примера. Посмотри как память распределяется. Думаю все ясно станет
Наверное еще будет вопрос: А почему имеено выравнивание по границе 8 байт, а не 1. Ответ прост - оптимизация |
| Автор: gepard 14.6.2004, 10:52 | ||
По-моему стоило бы поместить в FAQ. bel_nikita Спасибо, за объяснение. |
| Автор: lynx_916 14.6.2004, 11:20 |
| не КБ а Б размер-то в байтах! |
| Автор: gepard 14.6.2004, 15:33 | ||
Без флейма. |