@Bonce

Сколько байтов должен занимать объект?

Есть класс
class where
{
	char charray[10];
public:
	void reveal()
	{ cout << "\nМой адрес  - " << this; }
};

Кажется, что разность между адресами должна быть в 10 единиц, однако, Visual Studio 2015 выдает адреса, отличающиеся на 14 единиц. Почему так?
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Кажется, что разность между адресами должна быть в 10 единиц

Только кажется. Ничто в стандарте этого не гарантирует.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Процессору удобнее (ну, инженерам было удобнее спроектировать такое), когда данные выровнены в памяти. Поэтому компилятор дополняет структуры ничего не значащими байтами (padding). Да, это перерасход оперативки, но в обмен на скорость. Память нынче дешевле скорости.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Выравнивание тут, скорее всего, не при чём. 10 байт занимают данные и 4 байта - указатель на функцию reveal(). И полагаю, что вы не создаёте объекты динамически, иначе добавлялось бы ещё 8 байт - 4 для размера выделенного блока памяти и 4 для указателя на следующий выделенный блок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы