Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HeavDev
2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 44
#1

Sizeof объекта в классе - C++

29.01.2014, 16:53. Просмотров 305. Ответов 8
Метки нет (Все метки)

Допустим у меня в классе
C++
1
2
3
4
private:
char *name;
float tsena;
int chastota;
При подсчете sizeof объекта класса выдает 12. Это понятно.
Теперь допустим у меня
C++
1
2
3
4
5
private:
char *name;
float tsena;
int chastota;
char v[15];
При отдельном подсчете sizeof v; Пишет 15. Но когда в целом считаем объект. То получается 28. Откуда взялась единица. Это как-то связано с чар, но как сформулировать не могу. Помогите пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 16:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Sizeof объекта в классе (C++):

Sizeof(.) или constexpr size_t tmp = sizeof(.) - C++
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности? правильности?

Создание объекта в классе - C++
Имеется некий класс, например class Food. Нужно чтобы в главной функции вызывался объект класса Food, который определен в Food.cpp или в...

Удаление указателя, в классе не содержащем объекта - C++
Подскажите, в классе объявляю указатель на объект, сам объект создан в не этого класса, вопрос - нужно ли удалять указатель на этот объект...

Объявление в классе объекта другого класса - C++
какая-то фигня получается, допустим есть 2 класса - class1 и class2, в хедерах class1.h подключён class2.h, а в class2.h подключён...

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile) - C++
как записать часть массива чаров? допустим у нас arr; мне надо записать с позиции массива 500 до 600, 100 байтов как записать эту...

Поиск объекта в классе по строке типа char - C++
Есть такая задача : Описать класс с именем PRICE, содержащий следующие поля: - название товара; - название магазина, в котором...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.01.2014, 17:05 #2
HeavDev, думаю, Вам поможет этот вопрос: http://www.cyberforum.ru/cpp-experts/thread1076677.html
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.01.2014, 17:06 #3
HeavDev, это связано с выравниванием структур.
1
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
29.01.2014, 17:13 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от HeavDev Посмотреть сообщение
Но когда в целом считаем объект. То получается 28.
давай считать
char *name;
указатель 4 байта
float tsena;
4 байта
int chastota;
4 байта
char v[15];
15 байт, доводится до кратного 4 получается 16
4+4+4+16=28
расчеты вел для 32х разрядной системы
1
HeavDev
2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 44
29.01.2014, 17:15  [ТС] #5
Цитата Сообщение от ValeryS Посмотреть сообщение
char v[15];
15 байт, доводится до кратного 4 получается 16;
а можно узнать причину доведения до кратного 4м?
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.01.2014, 17:17 #6
Цитата Сообщение от HeavDev Посмотреть сообщение
а можно узнать причину доведения до кратного 4м?
процессор работает со словами, а слово - это 4 байта. скорее всего, это причина
1
HeavDev
2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 44
29.01.2014, 17:18  [ТС] #7
ну да... скорее всего так и есть. Спасибо большое!
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
29.01.2014, 17:30 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от HeavDev Посмотреть сообщение
а можно узнать причину доведения до кратного 4м?
можно
Цитата Сообщение от Tulosba Посмотреть сообщение
связано с выравниванием структур.
процессор 32х разрядный ему удобней( быстрей) считать когда адреса кратны
32 бита это 4 байта
16 разрядные выравнивали до 2 байт( 16 бит)
на самом деле выравнивает не процессор а компилятор, делает как удобней процессору
и у каждого компилятора в свойствах проекта можно выставить это выравнивание
на один байт( отсутствие выравнивания)
на два байта
на четыре байта
на восемь

Добавлено через 9 минут
Цитата Сообщение от metaluga145 Посмотреть сообщение
процессор работает со словами, а слово - это 4 байта.
слово это два байта WORD
четыре байта это двойное слово DWORD
1
HeavDev
2 / 2 / 0
Регистрация: 25.06.2013
Сообщений: 44
29.01.2014, 17:31  [ТС] #9
Благодарю! Всё доступно объяснили)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 17:31
Привет! Вот еще темы с ответами:

Как в классе А у объекта класса B вызвать метод класса B ? - C++
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли в...

sizeof( char * ) & sizeof(char) - C++
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну с последним ясно , а вот с первым непойму... Может кто-то...

В классе инициализировать массив, в классе создать функцию вывода массива на экран - C++
Прошу помоши с выводом данных, которые содержаться в массиве, на экраy: Задача: В классе инициализировать массив, в классе создать...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе - C++
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot. Скажите как объявить, что бы один из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.01.2014, 17:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru