Где в стандарте C++ задокументирована структура памяти объектов?

Это большой вопрос, поэтому я прошу справку, а не ответ размером с буклет. Я прохожу экскурсию по C++ по Страуструпу, и похоже, что расположение объектов основано на том, что память является фундаментом для проектирования многих функций C++, например, POD против агрегатов против классов с виртуальными членами.

К сожалению, сам Тур не охватывает этот предмет подробно, и просмотр ToC некоторых стандартных ссылок, таких как C++ Primer 5ed и TCPPPL 4ed, не показывает, покрывают ли они это или нет.

1 ответ

Решение

[class.mem] / 18:

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

и [class.mem] / 25:

Если объект класса стандартной компоновки имеет какие-либо нестатические элементы данных, его адрес совпадает с адресом его первого нестатического члена данных. В противном случае его адрес совпадает с адресом его первого подобъекта базового класса (если есть). [Примечание: Следовательно, в объекте структуры стандартной компоновки может быть безымянный отступ, но не в его начале, что необходимо для достижения соответствующего выравнивания. - примечание конца] [Примечание: объект и его первый подобъект являются взаимозаменяемыми по указателю ([basic.compound], [expr.static.cast]). - конец примечания]

Существует также [dcl.array], который указывает, что массивы непрерывны в памяти, [class.bit], который говорит о битовых полях, и [intro.object], который говорит о размере объекта и концепции перекрывающихся подобъектов.

Там могут быть и другие места. Там нет ни одного места.

Другие вопросы по тегам