освобождение памяти
class TForm1 : public TForm
{
-----------Cuted-----------
public: // User declarations
TList *MyList;// создается при создании формы
-----------Cuted-----------
};
TImage *Ar[5001] ;
int *s;
//===========================================
//Implementation
void __fastcall TForm1::Button5Click(TObject *Sender)
{
int i;
s= new int[5001];
for (i=0;i<5000;i++) Ar=new TImage(Form1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
int i;
for (i=0;i<5000;i++) delete Ar;
delete[] s;
}
Сразу сделай оговорку: следил за показаниями диспетчера задач (памяти ,используемой процессом)
Так вот при создании даного массива TList и заполнения его пустыми TImage (взят для примера с о структурами происжодит тоже самое) память увеличивается, но при освобождении память изменяется либо незначительно либо вовсе не изменяется.
В Делфи ситуация анологичная.
P.S.: критика приветствуется.
Если тебе вновь понадобится память, то она уже будет выделена, экономя время.
Проблема вот в чем есть: массив, который заполняется Динамически.
class TForm1 : public TForm
{
-----------Cuted-----------
public: // User declarations
TList *MyList;// создается при создании формы
-----------Cuted-----------
};
TImage *Ar[5001] ;
int *s;
//===========================================
//Implementation
void __fastcall TForm1::Button5Click(TObject *Sender)
{
int i;
s= new int[5001];
for (i=0;i<5000;i++) Ar=new TImage(Form1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
int i;
for (i=0;i<5000;i++) delete Ar;
delete[] s;
}
Сразу сделай оговорку: следил за показаниями диспетчера задач (памяти ,используемой процессом)
Так вот при создании даного массива TList и заполнения его пустыми TImage (взят для примера с о структурами происжодит тоже самое) память увеличивается, но при освобождении память изменяется либо незначительно либо вовсе не изменяется.
В Делфи ситуация анологичная.
P.S.: критика приветствуется.
На самом деле проблемы здеь никакой нет. При удалении элемента из TList (как в общем случае и из вектора и т.п.) память не освобождается. И это вобщем случае нормально. Почему так - если коротко в данном случае обязанность выполнять это возлагается на программиста. То есть тебе после операции удаления либо по каким либо другим событиям необходимо выполнять изменения массива до требуемого уровня. Подробней рекомендую почитать в литературе посвященной STL, все что касаеться вопросов проектирования шаблонов контейнеров.
Это затем, чтобы не тормозило.
Если тебе вновь понадобится память, то она уже будет выделена, экономя время.
Согласен ,но небудет ли проблем т.е отказа в выделении памяти ,если взять тотже массив более крупного размера (предел доступной памяти (физ+вирт)),потом освободить и запустить другую копию того же приложения и повторить создание того же массива. ( в теории)
И в дополнение не подскажет кто-нибудь направлеение или название ф-ии полученя инф об исп памяти самим приложением
Смотри VirtualQuery
Согласен ,но небудет ли проблем т.е отказа в выделении памяти ,если взять тотже массив более крупного размера (предел доступной памяти (физ+вирт)),потом освободить и запустить другую копию того же приложения и повторить создание того же массива. ( в теории)
Проблем не будет только в том случае если ты будешь сам контролировать этот процесс. При завершении приложения вся память занятая программой возращается в систему - по крайней мере теоретически. На практике этот процесс достаточно не простой и возможно возникновение ситуации при котором доступная для приложений память окажется исчерпана.
Что бы не иметь проблем лучше работать с подобными объектами несовсем массивом сразу а с его частью, загружая необходимые объекты по мере необходимости но не меняя размер массива.