Изменения

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

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

1434 байта убрано, 20:35, 11 июля 2011
Нет описания правки
[[Файл:vmmap.png|right|thumb|200px|Окно программы VMMap]]
Для визуализации адресного пространства можно использовать программу VMMap. В главном окне на диаграмме можно видеть распределение физической памяти адресного пространство между самой программой, подключенными библиотеками, переменными и др. Как видно из скриншота, адресное пространство занимает в физической памяти много меньше, чем предоставленные ему <tex>4GB</tex> (или <tex>2^{64}B</tex> для 64-битных систем), то есть, оно не хранит пустые страницы. Именно поэтому даже на 64-битных системах возможно одновременно запускать несколько процессов, и не бояться того, что объем физической памяти сильно меньше <tex>2^{64}B</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=Показать в адресном пространстве ран-тайм, библиотеки ядра}}
97
правок

Навигация