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

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

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

2

Решение

[Class.mem] / 18:

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

а также [Class.mem] / 25:

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

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

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]