B
B
Bonce2016-06-17 21:14:26
C++ / C#
Bonce, 2016-06-17 21:14:26

How many bytes should the object take?

There is a class

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

It seems that the difference between the addresses should be 10 units, however, Visual Studio 2015 produces addresses that differ by 14 units. Why is that?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
J
jcmvbkbc, 2016-06-17
@Bonce

It seems that the difference between the addresses should be 10 units

It just seems. Nothing in the standard guarantees this.

A
Armenian Radio, 2016-06-17
@gbg

Процессору удобнее (ну, инженерам было удобнее спроектировать такое), когда данные выровнены в памяти. Поэтому компилятор дополняет структуры ничего не значащими байтами (padding). Да, это перерасход оперативки, но в обмен на скорость. Память нынче дешевле скорости.

R
Rsa97, 2016-06-17
@Rsa97

Выравнивание тут, скорее всего, не при чём. 10 байт занимают данные и 4 байта - указатель на функцию reveal(). И полагаю, что вы не создаёте объекты динамически, иначе добавлялось бы ещё 8 байт - 4 для размера выделенного блока памяти и 4 для указателя на следующий выделенный блок.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question