Что такое 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