Планирование памяти для класса является последовательным? - PullRequest
0 голосов
/ 30 января 2011

Когда мы объявляем объект класса , является ли его макет памяти последовательным (один за другим)? Если он более последовательный, чем происходит заполнение (например, заполнение структуры)? помогите мне с концепциями макета памяти для класса

Заранее спасибо.

1 Ответ

7 голосов
/ 30 января 2011

Когда мы объявляем объект класса, является ли его выделение памяти последовательным (одно за другим)?

Стандарт не дает такой гарантии.Расположение памяти объекта определяется реализацией.

Обычно адрес памяти для элементов данных увеличивается в порядке, в котором они определены в классе.Но этот порядок может быть нарушен в любом месте, где встречаются спецификаторы доступа (private, protected, public).Это было подробно обсуждено в Внутри объектной модели C ++ Lippman .

Отрывок из Журнала пользователей C / C ++ ,

Однако компилятору не разрешается делать эту перестановку самостоятельно.Стандарт требует, чтобы все данные, которые находятся в в том же public :, protected: или private: были размещены компилятором в таком порядке. Если вы добавляете свои данные в спецификаторы доступа, то компилятору разрешается переупорядочивать блоки данных, разделенные спецификатором доступа, для улучшения макета , , поэтому некоторым людям нравится помещать спецификатор доступаперед каждым элементом данных .

Интересно, не правда ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...