Вопросы по теме 'memory-layout'

Как выглядит карта памяти процесса Windows?
Это может быть повторяющийся вопрос. Я хочу знать, как выглядит карта памяти процесса Windows? Ищу подробности. Пожалуйста, предоставьте ссылки на блоги, статьи и другую соответствующую литературу.
10468 просмотров

макет памяти процесса Windows
Итак, я играл с отладчиком Olly, обнюхивая все, что я еще могу узнать об окнах, и нажал кнопку M, и появилось окно карты памяти. Итак, я поискал в Google несколько статей на эту тему и обнаружил, что могу писать по адресам выше 64К, которые я...
1552 просмотров
schedule 05.10.2021

Что происходит с виртуальным базовым классом при многоуровневом наследовании?
Играя с наследованием, мне довелось попробовать следующее: class A { int i; }; class B : virtual public A { int j; }; class C : public B { int k; }; int main() { std::cout<<sizeof(C)/sizeof(int); return 0; } Что дало мне...
476 просмотров

Где хранятся статические константы?
Если константа определена глобально, она переходит в сегмент text . Локальные константы помещаются в stack . Статические переменные сохраняются в сегменте data или bss в зависимости от того, инициализирован ли он на месте и чем он...
59 просмотров
schedule 13.09.2021

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

ELF64/x86_64 и начальный адрес сегмента отображения памяти (для общих объектов)
Я написал несколько программ и обнаружил, что при компиляции в 64-битной версии сегмент отображения памяти (где, например, хранятся общие объекты и общая память) всегда находится где-то в районе 7f9aca84a000-7fff88400000, но никогда точно не...
2505 просмотров

Несоответствие адреса 'this', когда базовый класс не полиморфен, но является производным
Вот такой код: #include <iostream> class Base { public: Base() { std::cout << "Base: " << this << std::endl; } int x; int y; int z; }; class Derived : Base { public: Derived() {...
1960 просмотров

Как устроен счетчик ссылок shared_ptr?
Я довольно новичок в C++. Я думал, что shared_ptr хранит отдельный указатель на отдельную переменную счетчика ссылок. Но сегодня я вдруг понял, что на самом деле я не знаю, как это устроено, и ссылочное значение не обязательно должно иметь...
827 просмотров
schedule 12.09.2023

Почему я вижу несколько одинаковых сегментов в выводе /proc/pid/maps?
Тест на 32-битной Linux Код выглядит следующим образом: int foo(int a, int b) { int c = a + b; return c; } int main() { int e = 0; int d = foo(1, 2); printf("%d\n", d); scanf("%d", &e); return 0; } и когда...
1043 просмотров

Есть ли прагма, чтобы не заботиться о макете структуры/класса? Если нет, то почему?
Существуют различные pragma для управления макетом структуры/класса, например pragma pack . Но, насколько я знаю, нет pragma , чтобы сказать: «Меня не волнует макет. Он внутренний, код на него не полагается. Измените порядок для лучшей...
198 просмотров
schedule 01.10.2023

Dlang — есть ли способ встраивать объекты в объекты?
В соответствии со спецификацией D все классы доступны по ссылке, что означает, что следующий класс будет расположен в памяти следующим образом. Псевдокод: class A { public int c; public B b; } Схема памяти объекта типа A: 4...
129 просмотров
schedule 21.12.2022

Массив несмежных объектов
#include <iostream> #include <cstring> // This struct is not guaranteed to occupy contiguous storage // in the sense of the C++ Object model (§1.8.5): struct separated { int i; separated(int a, int b){i=a; i2=b;}...
973 просмотров

Почему разница между двумя указателями не равна размеру типа?
У меня есть простая программа: #include <iostream> using namespace std; int main() { int a = 5; int b = 6; int* p1 = &a; int* p2 = &b; std::cout << p1 << " " << p2 << " ,sizeof(int)="...
130 просмотров

Имеет ли значение порядок объявления свойств?
Согласно работе с MemoryLayout , следующие структуры Foo и Bar будут иметь одинаковые значения для stride и alignment : struct Foo { let myInt: Int let myBool: Bool } struct Bar { let myBool: Bool let myInt: Int }...
59 просмотров
schedule 21.01.2023

Копии переменных-членов с защитой от наследования в памяти
Мне сказали, что если я выполняю наследование, когда базовый класс содержит защищенные переменные-члены, а дочерний класс создаст базовый класс, он будет дублировать его члены в памяти. Пример: class Animal { public: virtual std::string&...
90 просмотров

Проблемы с размещением памяти в C (64-разрядная версия)
Я хотел понять, как работает программа «C» и хранит данные в машине. Поэтому я просмотрел схему памяти C из здесь и последовал те же инструкции на моей 64-битной машине. Во-первых, когда я написал программу (у main есть только return 0; ) и...
164 просмотров
schedule 29.03.2023

Максимальный размер стека многопоточного процесса
В моем понимании каждый поток процесса получает стек, в то время как обычно для процесса существует только одна куча. Существует предел максимального размера стека по умолчанию, установленный ОС. Windows-64 bit : 1MB Linux-64 бит: 8 МБ...
567 просмотров

Потоки имеют одинаковое пространство виртуальной памяти, но разные стеки? Где стеки?
Стек времени выполнения программы хранится как часть виртуальной памяти и начинается с адреса X в системе Y (без учета рандомизации). Когда создается новый поток с собственным независимым стеком, где он сохраняется? (потоки совместно используют свою...
56 просмотров