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

 
 
> ООП. Классы и динамические объекты, Подробности управления «кучей»
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
Ответов
CrimsonPig
сообщение Aug 17 2016, 11:33
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(Serhiy_UA @ Aug 17 2016, 11:59) *
4. Что можно почитать на эту тему по-подробней?

Хорошие вопросы... Правда немного из серии "почему солнце светит?" sm.gif

Функции управления кучей (malloc/free) и более модные new/delete реализованы в библиотеках. Они пользуются памятью, которые просят у ОС, если такая есть вообще. В Ц++ new/delete можно довольно легко переопределить и сделать свои аллокаторы.

Память выделяемая new/malloc всегда непрерывная (с точки зрения ее пользователя).
Читать начиная со Страуструпа.. Ну, или Кернигана с Ричи.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 17 2016, 12:06
Сообщение #3


Ally
******

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



Цитата(CrimsonPig @ Aug 17 2016, 14:33) *
Читать начиная со Страуструпа.. Ну, или Кернигана с Ричи.

Это занятие ни к чему хорошему не приведет.
Кучи слишком сложная тема чтобы пользоваться старыми книгами.

Первое что надо знать - это то что кучи делают все. И ОС, и компилятор, и сами прикладные программы их могут переопределять.

Т.е. в одной среде разработки вы можете иметь выбор нескольких движков куч.
Например в RAD Studio под Windows есть старый движок кучи, новый движок и движок который они наследуют из API Windows.

Для встраиваемых систем еще все хуже и запутанней.
Во первых, стандартное управление кучей есть в библиотеках компилятора.
Но даже так там есть механизм подстройки когда самые низкоуровневые функции движка кучи программист должен подстроить сам.
Во всех RTOS тоже есть свои механизмы кучи поскольку они не надеются на штатную подстройку компилятора.
Во FreeRTOS аж три движка кучи на выбор.
Для RTOS куча является очень критичным моментом поскольку надо обеспечить фиксированное время выполнения ее функций и безопасный доступ при многозадачности, часто еще и таймаут доступа делают.
Поэтому стандартные библиотечные кучи не используют, а перенаправляют new/delete на свои функции.
Однако при старте программы движок RTOS еще не работает, поэтому конструкторы объектов могут напороться еще на библиотечные функции.
Короче в этой теме кругом грабли.

Читать надо мануал на конкретный компилятор и ОС. Классики не помогут.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serhiy_UA   ООП. Классы и динамические объекты, Подробности управления «кучей»   Aug 17 2016, 10:59
|- - SasaVitebsk   Цитата(AlexandrY @ Aug 17 2016, 15:06) Во...   Oct 3 2016, 17:18
- - sigmaN   А дальше можно изучить мысли товарища Александреск...   Aug 29 2016, 09:56
|- - Serhiy_UA   Спасибо за разъяснения. Пока еще не все понятно, н...   Aug 30 2016, 05:12
|- - Сергей Борщ   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, 08:12) Па...   Aug 30 2016, 05:56
|- - Serhiy_UA   Команд new/delete мне в работе хватает без вопросо...   Aug 30 2016, 08:03
|- - AlexandrY   Цитата(Serhiy_UA @ Aug 30 2016, 11:03) А ...   Aug 30 2016, 09:22
|- - Сергей Борщ   QUOTE (Serhiy_UA @ Aug 30 2016, 11:03) А ...   Aug 30 2016, 10:14
- - brag   На мой взгляд, самая подходящая для embedded - это...   Oct 4 2016, 17:25


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 16:14
Рейтинг@Mail.ru


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