C++: Как узнать размер SubObject базового класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++: Как узнать размер SubObject базового класса?

Сообщение Anonymous »

.

Здесь я обсуждал оптимизацию пустой базы, и MSalters сделал интересный комментарий:

Ни один класс не может иметь
sizeof(Class)==0, пустым или нет. Но
мы говорим конкретно о
размере пустого подобъекта базового класса.

Ему не нужна ни собственная виртуальная таблица, ни
указатель vtable. Предположим, что общее
расположение указателя виртуальной таблицы со смещением
0; это приведет к тому, что подобъект базового класса
нулевого размера будет использовать свой
указатель vtable с производным классом.
Нет проблем: они должны быть идентичны
в любом случае, в этом вся суть
виртуальных функций.


Мой вопрос конкретно заключается в следующем: компилятор может оптимизировать, когда мы используем пустой класс в качестве базового класса или может быть и нет. Как нам определить, что он на самом деле делает?

И вообще, как мы можем узнать размер подобъекта базового класса? Одинаков ли размер подобъекта Base независимо от того, используем мы его в качестве базового или нет? Компиляторы оптимизируют только пустые базовые классы?

.

Подробнее здесь: https://stackoverflow.com/questions/433 ... -subobject
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»