Где в стандарте C ++ задокументирована структура памяти объектов? - PullRequest
0 голосов
/ 11 июня 2018

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

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

1 Ответ

0 голосов
/ 12 июня 2018

[class.mem] / 18 :

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

и [class.mem] / 25 :

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

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

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

...