Не лучше ли прививать культуру работы с памятью. Нет же в этом ничего заумного и трудного. Меня не напрягает для программ, где используется много объектов, расписывать карту памяти... это позволяет заблаговременно понять, что же и как, собственно, делается в программе... увидеть узкие места.
В частности, что конкретно подразумевается под картами памяти и как их составлять?
Это довольно просто. Пусть для работы программы необходима динамически выделяемая память. Распределение памяти под динамические структуры представляется в виде карты памяти программы.
Предположим, что мы пишем программу по работе с заказами. Для комфортной работы пользователей желательно, чтобы необходимая им информация находилась "на кончиках пальцев", дабы её получения не пришлось ожидать долго. Какая информация может понадобиться пользователям при работе с заказами?
- о принятых заказах;
- о поступивших заявках;
- о продукции и услугах;
- о ценах (прейскуранты);
- о платежах;
- об отгрузках;
- о складских запасах;
- о заказчиках;
Информация хранится в реляционной БД, то есть, является структурированной.
При старте приложения необходимая для работы информация закачивается в приложение и располагается в памяти в виде массивов структур соответствующих типов.
Карта памяти отражает сколько памяти выделяется под каждый массив структур, какие массивы структур перечитываются из БД и при каких событиях/действиях пользователя.
Конечно, не вся информация закачивается в приложение сразу. Например, чтобы увидеть параметры продукции/услуг пользователь вызовет нужную форму, и при старте данной формы требуемая информация будет получена из БД. Но при проектировании приложения проектировщик должен гарантировать, что памяти хватит для размещения нужной информации и, если необходимо, укажет ограничения, на количество элементов того или иного вида, которые будут закачиваться из БД.
Чтобы информация не только гарантированно размещалась в памяти, но и работа с ней происходила быстро и удобно, был написан свой менеджер памяти. Суть его работы проста...
При инициализации указывается совокупный размер пула (необходимый размер памяти). При этом физическая память не выделяется. При закачке данных запрашивается нужный под данную структуру размер памяти и она выделяется/закрепляется, и её адрес возвращается запрашивающей программе. Как следствие, закачиваемые структуры располагаются последовательно, как элементы массива. Освобождение памяти может происходить полностью или частями.
Вот, собственно, и всё.