Изменения

Перейти к: навигация, поиск

Работа с памятью

1272 байта убрано, 22:33, 23 июля 2011
Куча
Для каждого <tex>malloc/new/new[]</tex> должны вызываться <tex>free/delete/delete[]</tex>, т.к. память сама не освобождается при выходе из функций. Не вызвав эти функции, куча останется неосвобожденнной, и произойдут утечки памяти.
 
Рассмотрим процесс выделения памяти в куче на примере простой программы:
 
[[Файл:vmmap_before.png|right|thumb|200px|Память не выделена]]
[[Файл:vmmap_after.png||right|thumb|200px|Выделена память под массив]]
[[Файл:vmmap_delete.png||right|thumb|200px|Память освобождена]]
 
int main()
{
int *a = new int [1000000];
delete [] a;
return 0;
}
 
До выполнения
int *a = new int [1000000];
куча в адресном пространстве программы занимает <tex>1152kB</tex>, а после выполнения команды - <tex>5060kB</tex>. Значит, память была выделена именно в куче, и объем выделенной памяти равен <tex>3908kB</tex>, что почти в точности соответствует объему массива <tex>int</tex> из <tex>1000000</tex> элементов при выделении <tex>4B</tex> на элемент.
 
После выполнения
delete [] a;
размер кучи снова равен <tex>1152kB</tex>, как и до выделение памяти под массив.
{{TODO| t=Переписать раздел про кучу подробнее и понятнее. Идея в том, чтобы сначала показать, что можно делать для эффективного распределения памяти, а потом обрадовать людей тем, что куча уже реализована.}}
69
правок

Навигация