struct St{
int ivar;
};
int main()
{
// программа должна поместить в системный
int ivar = 100; // стек
int ivar2 = 200; // из
int ivar3 = 300; // этих
St st; st.ivar = 400; // примитивных типов.
int * iref = &ivar; // но я беру и ссылаюсь на кучу по адресу кусочка этого стека
// после чего я могу итерироваться
// по стеку смещая указатель получая все примитивы:
cout
C/C++
Вот так примерно выглядит карта памяти для процесса, написанного на языке Си. Только стек распределен заранее и имеет небольшой размер, в районе 1 мб для visual c++.
Эксперимент над стековыми примитивными типами...

*$~._.ч.и.п.о.л ._.~$*
Аа терь понял. Стек просто представляет данные в виде стека но использует при этом оперативу. А куча это неупорядоченный объем памяти в оперативе... Просто неоднократно слышал если куча то оператива а если стек то где то в другом месте)))) все мне теперь все стало ясно
int * iref = &ivar; // вы ссылаетесь не на кучу а на адрес первого элемента помещенного в стек.
Можете взять что-то из кучи и сравнить адреса. int * iref2 = new int{}; //оператор new выделяет память из кучи
cout
*$~._.ч.и.п.о.л ._.~$*
Но сам стек образован из кучи. Поэтому можно говорить о стеке как об упорядоченной куче. Поэтому ссылаясь на адрес примитивнтго элемента стека мы ссылаемся на упорядоченную область памяти в куче. Я думаю так.
*$~._.ч.и.п.о.л ._.~$*
Все я понял...
У вас system access violation (нарушение системных прав доступа). Так делать нельзя. Windows отлавливает такую попытку и не дает вам сломать систему, уничтожив или взломав другой процесс операционной системы или всю систему. В самом тяжелом случае это будет поломка всей операционной системы.
Системные права доступа принадлежат ядру Windows, или ядру Linux, или ядру Unix, в которых действует виртуальная машина, которая проверяет ваш код на правильность, отладчик ядра, система безопасности.
Куча выделяется с помощью CreateHeap на пользовательском уровне.
Если вы хотите, чтобы было так, как у вас написано, то вам нужно писать системный драйвер sys для ядра системы с помощью windows driver kit (wdk/ddk), который будет иметь полные права доступа и будет делать с операционной системой все, что хочет.
Системные права доступа принадлежат ядру Windows, или ядру Linux, или ядру Unix, в которых действует виртуальная машина, которая проверяет ваш код на правильность, отладчик ядра, система безопасности.
Куча выделяется с помощью CreateHeap на пользовательском уровне.
Если вы хотите, чтобы было так, как у вас написано, то вам нужно писать системный драйвер sys для ядра системы с помощью windows driver kit (wdk/ddk), который будет иметь полные права доступа и будет делать с операционной системой все, что хочет.
Сергей Смышляев
В исходном коде в вопросе нет нарушения прав доступа и никакой драйвер для подобного эксперимента не нужен.
Естественно, они лежат в памяти - где еще?
Но вот порядок тебе не гарантируют, смотри ассемблер:
Например, тут если брать int * iref = &ivar; за базу, только iref и iref - 1 попадают в результаты, и то iref - 1 дает st.ivar
Но вот порядок тебе не гарантируют, смотри ассемблер:

*$~._.ч.и.п.о.л ._.~$*
Понял теперь. А я думал стек это какая то флешпамять процессора... Спасибо что объяснили.
Это значит, что стек находится в какой-то системной куче, в оперативной памяти
*$~._.ч.и.п.о.л ._.~$*
Вот я тоже так думаю, только сейчас решил проверить это.
Похожие вопросы
- Что такое вообще типы данных в с++? Что НЕ является типом данных
- Помогите написать код (как можно примитивнее)
- Значение типа const char* нельзя присвоить сущности типа char*
- C++, Как сделать тип возврата из функции по ситуации / динамический? P.S.auto не поможет
- Список с элементами типа char.
- Задача на С Объявить массив данных типа double размером 3 на 3.
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Неявное приведение типов в С
- Программирование С++ тип даты
- C++: На каких фреймворках, средах разработки C++ делаются большие проекты, по типу Photoshop, Unreal Engine, Steam?