|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.02.2012, 16:08 | #1 |
Пользователь
Регистрация: 20.10.2009
Сообщений: 23
|
c++ класс память
Здравствуйте.
Есть класс, в нем хранятся две переменные: однобайтовый char и четырехбайтовый int. sizeof говорит, что тот тип данных потребляет 8 байт. Вопрос: куда девается еще 3 байта? Может быть, это как-то связанно с тем, что у меня Windows x64? Код:
Последний раз редактировалось Enchance; 01.02.2012 в 16:21. |
01.02.2012, 18:13 | #2 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Так как класс содержит объект типа int, то происходит его выравнивание внутри класса, чтобы он расположился на границе, кратной размеру этого типа. Поэтому после объекта типа char добавляются три байта, чтобы обеспечить такое выравнивание. Но даже если вы в классе поменяете местами объект типа int с объектом типа char, то все равно размер вашего класса будет равен 8, так как компилятору нужно обеспечить, чтобы следующий объект вашего класса, если, допустим эти объекты будут объеденины в массив, также распологался на границе слова, так как объект класса начинается с размещения объекта типа int.
Со мной можно встретиться на www.clipper.borda.ru
|
02.02.2012, 15:07 | #3 |
Пользователь
Регистрация: 20.10.2009
Сообщений: 23
|
В принципе, механизм понятен.
Только не понимаю, зачем это требуется. Если в разместить в классе 5 однобайтовых char-ов, то тип данных вполне спокойно будет занимать 5 байт. |
02.02.2012, 16:17 | #4 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Значит не все вы поняли. Размер объекта типа char составляет один байт, тоэтому и выравнивание идет по одному байту. А размер объекта типа int занимает машинное слово, поэтому и выравнивание происходит по границе слова. На 32-битовых машинах - это 4 байта.
Со мной можно встретиться на www.clipper.borda.ru
|
03.02.2012, 00:26 | #5 |
Пользователь
Регистрация: 20.10.2009
Сообщений: 23
|
OK, спасибо.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
память | offname | C# (си шарп) | 1 | 01.10.2011 10:33 |
Описать класс-родитель и класс-потомок. Delphi 7 | Andrew_M | Помощь студентам | 0 | 15.01.2011 14:42 |
Динамическая память. | spotmc13 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 20.09.2010 17:08 |
Память | Ghennadiy | Общие вопросы Delphi | 9 | 25.08.2009 09:23 |