реклама на сайте
подробности

 
 
> ООП. Классы и динамические объекты, Подробности управления «кучей»
Serhiy_UA
сообщение Aug 17 2016, 10:59
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Динамические объекты создаются и уничтожаются в памяти «кучи» (heap) с помощью доступных программисту операторов new/delete. В порядке самообразования по С++ хотел бы уточнить следующие скрытые от нас подробности:
1. Действия по динамическому размещению полей данных объекта в куче выполняет прикладная программа или операционная система?
2. Если за размещение в куче ответственна ОС, то все ли из ОС поддерживают динамические объекты (и в частности для встраиваемых систем)? И как в таком случае обслуживается одновременная работа нескольких активных на данный момент программ с общей кучей, или у каждой программы своя куча?
3. Если полей данных у конкретного объекта много, то его данные размещаются в памяти непрерывно или с разрывами (перескоками), в зависимости от текущего состояния кучи ?
4. Что можно почитать на эту тему по-подробней?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Aug 29 2016, 09:56
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



А дальше можно изучить мысли товарища Александреску по этому поводу
https://erdani.com/publications/cuj-2005-12.pdf
И более свежий, интересный видос
https://youtu.be/LIb3L4vKZ7U


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Aug 30 2016, 05:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Спасибо за разъяснения.
Пока еще не все понятно, но мнение мое по этому вопросу складывается такое.
Память под «кучу» упорядочивается и представляется, как бы в виде большой кассеты с группами коробочек разных величин. При создании объекта, ему выделяется нужная по размеру коробочка, а если они закончились, то большая из ближайшей группы. Если коробочек уже не хватает, то на основе статистики о требуемых размерах памяти создают следующую кассету. Для кассеты ведется текущий реестр учета свободных и занятых коробок, по которому и выделяется указатель на свободную память. То есть, кучи, и тем более «мало-кучи» в нашем понимании, как токовой нет, а все как бы строго упорядочено и физическая память под один динамический объект все же непрерывна, а не размазана с разрывами по её разным областям.
Поправьте, если понял не так…

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 30 2016, 05:56
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Serhiy_UA @ Aug 30 2016, 08:12) *
Память под «кучу» упорядочивается и представляется, как бы в виде большой кассеты с группами коробочек разных величин. ...
Поправьте, если понял не так…


Это вы описали не кучу, а Partitions.
В экстремально реалтаймных ситуациях, память выделяемая из Partitions так и остается в виде связных цепочек блоков, т.е. не представляют собой непрерывных областей.

А вот в какой RTOS вы нашли пункт о сборе статистики у Partitions уже интересней. Не поделитесь ссылкой?
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Aug 30 2016, 08:03
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Команд new/delete мне в работе хватает без вопросов. Просто любопытно знать о «кучах» больше...

А какие еще есть стратегии управления кучей? Где об этом почитать?
Освободившаяся память после удаления объекта имеет конечный размер. А как ее заполняют вновь, только ли объектами не большими по размеру от предыдущего? Или все-таки без разрывов никак?

Статистика числа объектов и их размер упомянуты в статье из сообщения от sigmaN.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 30 2016, 10:14
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Serhiy_UA @ Aug 30 2016, 11:03) *
А какие еще есть стратегии управления кучей? Где об этом почитать?
Тут


QUOTE (Serhiy_UA @ Aug 30 2016, 11:03) *
А как ее заполняют вновь, только ли объектами не большими по размеру от предыдущего?
Зависит от реализации. Вменяемому менеджеру памяти ничего не мешает объединить освободившийся участок с соседними свободными.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serhiy_UA   ООП. Классы и динамические объекты, Подробности управления «кучей»   Aug 17 2016, 10:59
- - CrimsonPig   Цитата(Serhiy_UA @ Aug 17 2016, 11:59) 4....   Aug 17 2016, 11:33
|- - AlexandrY   Цитата(CrimsonPig @ Aug 17 2016, 14:33) Ч...   Aug 17 2016, 12:06
|- - SasaVitebsk   Цитата(AlexandrY @ Aug 17 2016, 15:06) Во...   Oct 3 2016, 17:18
|- - Сергей Борщ   QUOTE (Serhiy_UA @ Aug 30 2016, 08:12) Па...   Aug 30 2016, 05:27
||- - jcxz   Цитата(Сергей Борщ @ Aug 30 2016, 11:27) ...   Aug 30 2016, 10:16
||- - AlexandrY   Цитата(jcxz @ Aug 30 2016, 13:16) Вменяем...   Aug 30 2016, 10:51
||- - jcxz   Цитата(AlexandrY @ Aug 30 2016, 16:51) Ду...   Aug 30 2016, 11:08
||- - AlexandrY   Цитата(jcxz @ Aug 30 2016, 14:08) Не гово...   Aug 30 2016, 11:31
|- - AlexandrY   Цитата(Serhiy_UA @ Aug 30 2016, 11:03) А ...   Aug 30 2016, 09:22
- - brag   На мой взгляд, самая подходящая для embedded - это...   Oct 4 2016, 17:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 18:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016