Описание тега object-layout

2 ответа

Значение указателя на член данных в C++

Встречайте очень странную проблему, кто-нибудь знает, в чем причина этого? код протестирован под Visual Studio 2012. #include <iostream> struct A { int a; }; struct B { int b; }; struct C : public A, public B { int c; }; int main() { int C::*p…
3 ответа

Влияет ли дополнительное наследование на структуру объекта или его создание?

В коде есть несколько специальных классов и есть несколько обычных классов. Я хочу их дифференцировать, потому что специальным классам нужно было по-разному относиться. Все эти специальные классы являются базовыми (не дочерними по отношению к другим…
09 окт '11 в 08:07
2 ответа

Почему в объекте Java существует внутренняя фрагментация, даже если каждое поле выровнено по 4 байта?

Вступление: Я использовал инструмент JOL (Java Object Layout) для анализа внутренней и внешней фрагментации объектов Java для исследовательских целей. При этом я наткнулся на следующее: x@pc:~/Util$ java -jar jol-cli-0.9-full.jar internals sun.refle…
29 ноя '17 в 08:41
6 ответов

Структура памяти объекта C++

Я пытаюсь понять расположение объектов для C++ в множественном наследовании. Для этого у меня есть два суперкласса A, B и один подкласс C. То, что я ожидал увидеть при попытке выгрузить его, было: vfptr | поля А | vfptr | поля B | поля С. Я получаю …
09 фев '14 в 19:58
3 ответа

C против C++ выравнивание структуры

В недавнем интервью меня спросили о выравнивании структурных полей C++, и я теоретизировал, что C и C++ придерживаются одной и той же стратегии в упаковке структур. Но это было неверное предположение. Интервьюер сказал, что в целом C и C++ упаковыва…
20 ноя '15 в 20:31
4 ответа

Разница в разметке памяти между вложенными классами и множественным наследованием в C++?

Я пытаюсь понять, как COM определяет расположение своих объектов, чтобы клиент, который хочет использовать объект COM, знал, как это сделать. Я читал, что COM-объект, который реализует несколько интерфейсов, может делать это по-разному, в том числе …
05 янв '11 в 20:37
4 ответа

Виртуальное наследование в C++

Я нашел это на веб-сайте, читая о виртуальном наследовании в C++ Когда используется множественное наследование, иногда необходимо использовать виртуальное наследование. Хорошим примером для этого является стандартная иерархия классов iostream: //Not…
3 ответа

C++ Можно ли оптимизировать данные константного класса вне класса компилятором?

Я знаю, что постоянные переменные вне классов могут быть оптимизированы напрямую в вызовы функций компилятором, но допустимо ли для компилятора делать то же самое для переменных постоянных классов? Если есть класс, объявленный так: class A { public:…
4 ответа

Почему размер класса увеличивается, когда int64_t меняется на int32_t

В моем первом примере у меня есть два битовых поля, используя int64_t, Когда я компилирую и получаю размер класса, я получаю 8. class Test { int64_t first : 40; int64_t second : 24; }; int main() { std::cout << sizeof(Test); // 8 } Но когда я …
5 ответов

Составляют ли члены данных диапазон?

Могу ли я рассматривать последовательные элементы данных одного типа как диапазон? Например: struct X { int a, b, c, d, e; }; X x = {42, 13, 97, 11, 31}; std::sort(&x.a, &x.a + 5); // kosher?
05 сен '13 в 12:11
4 ответа

Указатель на объект == указатель на первый член?

Почему условие if в следующем коде возвращает true? struct A { int firstMember; } a1; if (&a1 == static_cast<void*>(&a1.firstMember)) std::cout << "equal"; Я немного запутался, когда читал FAQ Страуструпа о пустых классах, а имен…
29 ноя '10 в 21:03
1 ответ

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

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

Кастинг и макет объекта

Я пытался понять расположение объекта, приведя следующие два несвязанных класса: class A { public: A(int x):_a(x){} private: int _a; }; class B { public: void Show() { cout << "&_x = " << &_x << "," << " _x = " <&l…
06 авг '13 в 11:26
1 ответ

Как дополнительный синтаксис / спецификатор функций-членов влияет на расположение памяти в классах?

Я думаю, что у меня есть четкое понимание членов данных класса и их представления в памяти: Члены класса определяют расположение объектов: члены данных хранятся один за другим в памяти. Когда используется наследование, члены данных производного клас…
26 сен '15 в 11:15
1 ответ

Макет объекта

Я хочу понять расположение объекта. Так что я выполнил с различными порядками переменных-членов. Все получилось, как и ожидалось, ожидайте следующей последовательности. #include <iostream> using namespace std; class Test1 { public: int m_a; ch…
25 авг '12 в 10:12
3 ответа

Обязательно ли макет объекта C++ обязательно статически определен?

Более конкретно, предполагая, A является доступным базовым классом BПриводит ли следующий код к неопределенному поведению, и гарантировано ли утверждение не срабатывать в соответствии со стандартом? void test(B b1, B b2) { A* a2 = &b2; auto offs…
1 ответ

Будет ли элемент данных класса standard_layout иметь фиксированное смещение от адреса объекта?

Если класс is_standard_layout, достаточно ли этого, чтобы гарантировать, что данный нестатический член данных всегда будет иметь одинаковое смещение от адреса объекта (т. Е. Одинаково для разных экземпляров этого класса в рамках всего процесса)?
06 ноя '15 в 09:10
1 ответ

Как интерпретировать слово метки экземпляра?

Я пытаюсь понять вывод макета объекта Java на 64-битной виртуальной машине HotSpot (v8). Я не понимаю, как используются первые три бита слова метки , которые в соответствии с комментарием в связанном файле класса должны указывать, установлена ​​ли н…
1 ответ

Представление объектов кучи для языка ОО

В рамках магистерской работы я пишу компилятор для объектно-ориентированного языка, который был разработан в моем домашнем университете. В настоящее время компилятор выводит ассемблер, который работает на виртуальной машине. Виртуальная машина обраб…
1 ответ

При каких условиях безопасно использовать std::memcpy для копирования между объектами?

При каких условиях безопасно использовать std::memcpy копировать с одного объекта на другой? Например, какие условия должны T, src а также dest удовлетворить следующие требования для безопасности: template <typename T> void copy_bytewise(T&amp…
22 янв '20 в 06:06