Я работаю с обработкой изображений в C ++ и иногда сталкиваюсь с проблемами памяти из-за фрагментации кучи (по крайней мере, я думаю, что фрагментация является проблемой)
Допустим, класс изображений выглядит следующим образом (псевдокод)
Image::Image(fileList): // ImageStack constructor
nextStackMember_(NULL),
fileName_(""),
intVar1_(0),
//
//
intVar10_(0);
bitmap_(NULL)
{
// Code to initialize all attributes except bitmap_
// bitmap_ is created from fileName when actually needed
}
Существуют методы-члены для выгрузки и загрузки bitmap_. Если бы при создании конструктор инициализировал bitmap_ всех членов, я бы создал кучу, подобную этой:. ---. ------ .--.----------.-- и так далее "."крошечное пространство кучи, занимаемое атрибутами, "---" - большое пространство кучи, занимаемое растровыми изображениями.Если стек содержит, скажем, 1000 изображений, он может использовать всю доступную кучу.В этом случае сброс bitmap_ может не позволить программе создать новое изображение, поскольку все загруженные изображения могут быть меньше.Даже если я перед созданием нового изображения выкидываю ВСЕ загруженные изображения (при очистке их bitmap_ куча будет полностью фрагментирована.
Теперь перейдем к «умной» части: загружая только bitmap_s после каждого изображения в стекесоздал я должен получить кучу, которая выглядит следующим образом: ......… ..------------------------------------- таким образом все остальные атрибуты будут плотно прилегать друг к другу в куче, и я мог бы легко создать области кучи, достаточно большие для любого нового размера изображения, которое я хочу создать.
Это не похожеработать так, как я надеялся. Что я сделал не так или я совершенно не на том пути?
edit: есть ли возможность в VisualC получить визуализацию кучи работающей программы?