Что такое C++ расположение объектов / структур в памяти и т. Д.?

Я полагаю, что в C++ стандарт C++ не имеет ничего общего с тем, как члены данных расположены в классе с точки зрения разметки памяти? Я был бы прав, думая, что это до рассматриваемого компилятора?

Мне очень интересно узнать, как объекты и другие объекты C++ (структуры и т. Д.) Представлены в физической памяти (я знаю, что такие вещи, как списки - это узел-узел, а массивы - это непрерывная память, но все остальные аспекты языка).

РЕДАКТИРОВАТЬ: поможет ли в этом изучение ассемблера x86 и лучше понять C++?

3 ответа

Решение

Да, стандарт не говорит о том, как объекты должны быть представлены в памяти. Чтобы понять, как представлены нормальные объекты C++, прочитайте эту книгу: внутри объектной модели C++.

Стандарт C++ определяет несколько вещей, но далеко не все.

Основные правила таковы:

  • объекты в массиве располагаются непрерывно, без заполнения между ними.
  • объекты класса, не разделенные спецификатором доступа (public:/private:/protected:) располагаются в памяти в том порядке, в котором они объявлены, но между объектами-членами может быть неопределенное количество отступов.
  • для определенных типов (структуры стандартного макета в стандартной терминологии) первый базовый класс или, если его нет, первый член размещается по тому же адресу, что и сам класс.

Есть еще несколько кусочков, определенных стандартом, но в целом оставшиеся детали действительно зависят от компилятора.

Проверьте эти ссылки на макет классов C++ (в книге PCASM есть целая глава о том, как они представлены)

http://forums.codeguru.com/archive/index.php/t-428671.html http://www.drpaulcarter.com/pcasm/pcasm-book-pdf.zip

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