Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Размер выделенной памяти для массива


VladSel ©   (2008-01-21 07:15:00) 

Здравствуйте
Вопрос простой: создаю массив с большим числом элементов и смотрю (в диспетчере задач) как меняется объём памяти занимаемой программой

procedure TForm1.Button1Click(Sender: TObject);
var len:integer;
 int_arr:array of integer;
 ext_add:array of extended;
 byte_arr:array of byte;
begin
 //Размер массива
 len:=10000000;
 // Integer SizeOf(Integer)=4 - размер с одной переменной
 //Память
 //Память + Виртуальная память = Всего
 //3432+660=4092 Кб
 //Выделяю память
 SetLength(int_arr,len);
 //Память
 //Память + Виртуальная память = Всего
 //42576+39772=82348 Кб
 //АНАЛИЗИРУЕМ
 //82348 - 4092 = 78256 Кб - Выделено на массив с данными (Integer)
 // 78256 / 10000000 = 8,0134144 байт на одну запись
 // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ??????????
 //Очистили
 SetLength(int_arr,0);

 // extended SizeOf(extended)=10 - размер с одной переменной
 //Память
 //Память + Виртуальная память = Всего
 //3468+660=4128 Кб
 //Выделяю память
 SetLength(ext_add,len);
 //Память
 //Память + Виртуальная память = Всего
 //101288+98420=199708 Кб
 //АНАЛИЗИРУЕМ
 //199708 - 4128 = 195580 Кб - Выделено на массив с данными (extended)
 // 195580 / 10000000 = 20,027392 байт на одну запись
 // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ??????????
 //Очистили
 SetLength(ext_add,0);

 // byte SizeOf(byte)=1 - размер с одной переменной
 //Память
 //Память + Виртуальная память = Всего
 //3528+660=4188 Кб
 //Выделяю память
 SetLength(byte_arr,len);
 //Память
 //Память + Виртуальная память = Всего
 //13312+10448=23760 Кб
 //АНАЛИЗИРУЕМ
 //23760 - 4188 = 19572 Кб - Выделено на массив с данными (extended)
 // 19572 / 10000000 = 2,0041728 байт на одну запись
 // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ??????????
 //Очистили
 SetLength(byte_arr,0);

end;

подскажите где я ошибаюсь


homm   (2008-01-21 20:33:00) [1]

> [10] Anatoly Podgoretsky ©   (21.01.08 18:37)

Очень познавательно.


Anatoly Podgoretsky   (2008-01-21 18:37:00) [2]

> homm  (21.01.2008 15:02:05)  [5]

Мужик меняет колесо в пустыне, тут подлетает фея и говорит -
Хочешь потрахаться?
Мужик конечно
Фея пшик, пшик, пшик по все колесам.

А ты хочешь потрахаться, устроим.


MetalFan   (2008-01-21 16:38:00) [3]

тогда уж сразу чугунные и к потолку)


homm   (2008-01-21 15:10:00) [4]

> [6] clickmaker ©   (21.01.08 15:06)

Блин, прочитал по привычке «к полу» :)


homm   (2008-01-21 15:08:00) [5]

> [6] clickmaker ©   (21.01.08 15:06)
> деревянные игрушки, прибитые к потолку? )

Хуже, к потолку :)


clickmaker   (2008-01-21 15:06:00) [6]


> Меня в детстве били

трудное децтво, деревянные игрушки, прибитые к потолку? )


homm   (2008-01-21 15:02:00) [7]

> [4] KSergey ©   (21.01.08 14:31)
> А толстой писькой не надоело трясти из ветки в ветку?

Меня в детстве били, теперь я злой на весь мир.


KSergey   (2008-01-21 14:31:00) [8]

> homm ©   (21.01.08 13:54) [3]
> Ты сначала смотрелку отрасти

А толстой писькой не надоело трясти из ветки в ветку?


homm   (2008-01-21 13:54:00) [9]

> [0] VladSel   (21.01.08 07:15)
> смотрю (в диспетчере задач) как меняется объём памяти занимаемой
> программой

Ты сначала смотрелку отрасти, потом будешь хвастатся, мол чето углядел. Смотрю в книгу, вижу фигу называется.


> //Память + Виртуальная память = Всего

Память + Виртуальная память <> Всего
 Это ты сам выдумал.
Виртуальная память = Всего
 Вот так верно. » Юрий Зотов: » Пожалуйста, повежливее. Не заставляйте принимать меры, это никому не нужно.


Leonid Troyanovsky   (2008-01-21 13:41:00) [10]


> VladSel   (21.01.08 07:15)  

> и смотрю (в диспетчере задач) как меняется объём памяти

Perfmon.exe forever.

--
Regards, LVT.


Loginov Dmitry   (2008-01-21 08:02:00) [11]

> подскажите где я ошибаюсь



> SetLength(int_arr,len);
> //Память
> // Память + Виртуальная память = Всего
> //42576+39772=82348 Кб


Виртуальная память - это вся память, выделенная процессу. Она складывается из физической памяти (ОЗУ) + памяти, сброшенной в файл подкачки. То, что 42576+39772=82348 - это неверно. На самом деле общее потребление составляет 39772. А то, что потребление физической памяти оказалось больше, чем потребление виртуальной - так просто диспетчер задач высчитывает, не верь ему! :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо