Как вычислитель размера С++ вычисляет размер?

Я создал класс X, имеющий только 2 общедоступные функции (конструктор и деструктор), и используя оператор sizeof, размер класса станет равным 1.

Когда я добавляю частный элемент данных типа char к вышеуказанному объявлению класса, размер по-прежнему равен 1. Наконец, я добавляю к нему целочисленный тип как член данных класса, и теперь размер составляет 8 байтов.

Просьба объяснить мне, как вычисляется размер класса.

Ответ 1

Сначала убедитесь, что функции, которые не являются виртуальными, не влияют на размер класса.

Размер экземпляра любого класса не менее 1 байт, даже если класс пуст, поэтому разные объекты будут иметь разные адреса.

Добавление char гарантирует, что разные объекты будут иметь разные адреса, поэтому компилятор не искусственно добавляет один к размеру. Тогда размер будет sizeof(char)= 1.

Затем вы добавляете int, который (возможно) добавляет 4 байта на вашу платформу. Затем компилятор решает заполнить класс, чтобы он был выровнен по причинам производительности/ЦП и добавил 3 пустых байта, чтобы размер теперь составлял 1 + 3 + 4 = 8. Вероятно, он добавляет дополнение до int чтобы он был выровнен по границе 4 байта, но это не требуется, если ваш процессор не требует этого.

Вы можете прочитать о дополнении на странице Википедии.

Ответ 2

Существует множество факторов, которые определяют размер объекта класса в С++. Эти факторы:

  • Размер всех нестатических элементов данных
  • Порядок элементов данных
  • Байт-выравнивание или заполнение байта
  • Размер его ближайшего базового класса
  • Существование виртуальных функций (динамический полиморфизм с использованием виртуальных функций).
  • Используется компилятор
  • Режим наследования (виртуальное наследование)

Здесь вы можете найти больше http://www.cprogramming.com/tutorial/size_of_class_object.html