Изменения

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

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

331 байт убрано, 18:47, 11 июля 2011
Нет описания правки
{{TODO|t=Если что перенесем в другое место}}
Программа [[Файл:vmmap.png|right|thumb|200px|Окно программы VMMap предназначена для визуализации адресного пространства. Если ее запустить на каком либо процессе, перед вами будет примерно следующая картина:]]
[[Файл:vmmapДля визуализации адресного пространства можно использовать программу VMMap. В главном окне на диаграмме можно видеть распределение физической памяти адресного пространство между самой программой, подключенными библиотеками, переменными и др.png|center|500px|thumb|Окно программы VMMap]]
Первое, что бросается в глаза - строки помеченные разными цветами. Различные цвета - различные области Рассмотрим процесс выделения памяти в адресном пространстве. Также можно увидеть сами адреса памяти(куче на рисунке выделено в красную рамку).примере простой программы:
Давайте посмотрим что происходит при выделении памяти и ее освобождении в адресном пространстве[[Файл:vmmap_before.png|right|thumb|200px|Память не выделена]][[Файл:vmmap_after. Для этого запустим следующую программуpng||right|thumb|200px|Выделена память под массив]][[Файл:vmmap_delete.png||right|thumb|200px|Память освобождена]]
int main()
return 0;
}
 
С помощью оператора new можно выделять память в куче(что такое куча будет рассказано в следующих статьях). Пока что просто посмотрим как эта память выделяется.
До выполнения
int *a = new int [1000000];
 [[Файл:vmmap_beforeкуча в адресном пространстве программы занимает <tex>1152kB</tex>, а после выполнения команды - <tex>5060kB</tex>.png|center|500px|thumb]] После выполнения int *a = new int [1000000];Видим выделение памятиЗначит, и ее обьем. [[Файл:vmmap_after.png|center|500px|thumb]] {{TODO|t=Здесь можно написать про обьем страниц память была выделена именно в 4Кбкуче, как я подозреваю выделилось 3908 Кби объем выделенной памяти равен <tex>3908kB</tex>, тк для хранения 10^6 интов нужно 3906,25 Кб}}что почти в точности соответствует объему массива <tex>int</tex> из <tex>1000000</tex> элементов при выделении <tex>4B</tex> на элемент.
После выполнения
delete [] a;
Видим освобождение размер кучи снова равен <tex>1152kB</tex>, как и до выделение памяти. [[Файл:vmmap_delete.png|center|500px|thumb]] Также можно видеть сам процесспод массив.
[[Файл:Process.png|center|500px|thumb]]
{{TODO|t=Показать в адресном пространстве ран-тайм, библиотеки ядра}}
97
правок

Навигация