Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/103: Рейтинг темы: голосов - 103, средняя оценка - 4.83
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Азы: статическая память, динамическая память, автоматическая память

02.07.2019, 20:06. Показов 21931. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
столько раз приходистя возвращаться к началу, и все благодаря моим преподавателям, которые не давали задавать вопросы на парах, а если это получалось сделать, то они говорили так: это мы будем изучать чуть позже, потом я все объясню. и это потом так и не приходило. еще хватало нагласти заявлять такое: мы же уже прошли эту тему, а вы ничего не знаете!

так мы же ждем когда придет этот 'потом' который вы нам обещали.


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



что имеем? имеем смутное представление об автоматической памяти(cтек) и еще туманнее представление об динамической памяти(heap).

автоматическая память создается из свободной оперативной памяти. создание объектов автоматической памяти совершается компилятором, и компилятором эти же объекты разрушаются. поэтому она и называется автоматической , потому что это все делает компилятор, а не программист, как в случае с динамической памятью.

допустим создали переменную в функции, под нее компилятор выделит память, и уничтожит, как только функция отработает, путем генерирования кода.

будет это происходит по методу LIFO, что напоминает стек. именно поэтому она еще называется стеком.


динамическая память.... она же куча. тут все делается как бы руками, выделяется она с помощью оператора new и высвобождается с помощью оператора delete.

C++
1
int* p =new int(666);
есть важный момент, что само число будет хранится в куче, а укзатель 'p' на это число - в стеке. менеджер памяти будет вызван оператором new и как только этот менеджер найдет в куче первое свободное достаточное для размещения типа int количество ячеек оперативной памяти, и выделит его как занятый и возвратит адрес оператору new.

у меня вопрос: зачем int* ? new возвращает адрес, а это всегда 4 байта в 32 разрядной операционной системе. будь то double или float адрес их будет занимать всегда 4байта. new int(666) тут все понятно.


скажите пожалуйста, зачем int* ? зачем тут указывать тип укзазателя?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2019, 20:06
Ответы с готовыми решениями:

Статическая память,Динамическая память.
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Статическая и динамическая память
Правда ли это: 1. что и статические, и динамические переменные при запуске программы попадают в одну и ту же часть виртуальной памяти —...

Статическая память
Если я на этапе компиляции выделил слишком много памяти. Например зарезервировал память под огромный массив.Но в системе нет столько памяти...

9
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.07.2019, 20:24
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
зачем int*
типизация же, он и на указатели распространяется. что бы при работе с указателем который указывает на int, нельзя было случайно работать как с указателем указывающим на тип string например.
C++
1
2
3
4
int* pi = new int{5};
std::string* si = new string{"5"};
 
int = *pi + *si; // Вот черт перепутал :)
Добавлено через 5 минут
Цитата Сообщение от pcmax Посмотреть сообщение
именно поэтому она еще называется стеком.
она называется стеком потому что на аппаратном стеке формируется.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.07.2019, 20:27
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста, зачем int* ? зачем тут указывать тип укзазателя?
Что бы различать на что именно он указывает. Это важно. Указатели на простые типы ещё можно худо бедно преобразовывать к void * и обратно, а вот с классами с множественным наследованием такое не получится. Там, чтобы преобразовать к указателю на базовый класс и обратно, нужно знать типы.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
03.07.2019, 08:50  [ТС]
ах вот оно что
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
03.07.2019, 16:24  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
на аппаратном стеке формируется.

можете еще помочь... скажите пожалуйста, а какой еще стэк существует кроме аппаратного? и в чем их отличия?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.07.2019, 16:43
стек как абстрактную структуру данных, можно реализовать программно, на основе например массива.

Добавлено через 11 минут
pcmax, вот и вот
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.07.2019, 16:44
Цитата Сообщение от _stanislav Посмотреть сообщение
что на аппаратном стеке формируется.
А аппаратный стек называется стеком, потому что
Цитата Сообщение от pcmax Посмотреть сообщение
это происходит по методу LIFO
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
03.07.2019, 17:01
Цитата Сообщение от pcmax Посмотреть сообщение
зачем int* ?
Ну ещё затем, чтобы delete знало, сколько места нужно освобождать. А так указатель может указывать куда угодно (содержать любое значение адреса), вот только читать/писать по его адресу можно только тогда, когда он указывает на выделенную программе память. Причём как автоматически, так и динамически выделенную память.

И да, сам указатель тоже можно выделить в динамической памяти, а в статической хранить указатель на указатель:
C++
1
2
int a;
int **pp = new int*(&a);  //указатель, указывающий на указатель в динамической памяти с адресом переменной в автоматической памяти
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
04.07.2019, 08:21  [ТС]
аппаратный стэк потому что он имеет свои регистры для хранения адресов?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
04.07.2019, 08:35
Цитата Сообщение от pcmax Посмотреть сообщение
аппаратный стэк потому что он имеет свои регистры для хранения адресов?
потому что он реализован аппаратно, не программно. вот полистывай перед сном.

Добавлено через 11 секунд
там много всего.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2019, 08:35
Помогаю со студенческими работами здесь

Статическая память и матрицы
сижу задачку делаю! с динамической памятью все нормально получилось! а со статической ошибки выдает! может кто поможет!!! задача...

На каком этапе выделяется статическая память
Если я создаю синглтон Маейрса: class Singleton { public: static Singleton& Instance() { static Singleton...

Динамическая память
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

Динамическая память
Народ, если кому не сложно помогите переделать вот эту программу со структурами нужно сделать так чтобы для хранения данных она...

Динамическая память с++
Как использовать динамическую память в с++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru