Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.222.12] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте
Вопрос простой: создаю массив с большим числом элементов и смотрю (в диспетчере задач) как меняется объём памяти занимаемой программой 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; //Integ[B]er SizeOf(Integer)=4[/B] - размер с одной переменной //Память //Память + Виртуальная память = Всего //3432+660=4092 Кб //Выделяю память SetLength(int_arr,len); //Память //Память + Виртуальная память = Всего //42576+39772=82348 Кб //АНАЛИЗИРУЕМ //82348 - 4092 = 78256 Кб - Выделено на массив с данными (Integer) //[B]78256 / 10000000 = 8,0134144 байт на одну запись[/B] // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ?????????? //Очистили SetLength(int_arr,0); //[B]extended SizeOf(extended)=10[/B] - размер с одной переменной //Память //Память + Виртуальная память = Всего //3468+660=4128 Кб //Выделяю память SetLength(ext_add,len); //Память //Память + Виртуальная память = Всего //101288+98420=199708 Кб //АНАЛИЗИРУЕМ //199708 - 4128 = 195580 Кб - Выделено на массив с данными (extended) //[B]195580 / 10000000 = 20,027392 байт на одну запись[/B] // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ?????????? //Очистили SetLength(ext_add,0); //[B]byte SizeOf(byte)=1[/B] - размер с одной переменной //Память //Память + Виртуальная память = Всего //3528+660=4188 Кб //Выделяю память SetLength(byte_arr,len); //Память //Память + Виртуальная память = Всего //13312+10448=23760 Кб //АНАЛИЗИРУЕМ //23760 - 4188 = 19572 Кб - Выделено на массив с данными (extended) //[B]19572 / 10000000 = 2,0041728 байт на одну запись[/B] // РАЗМЕР С ДАННЫМИ ЗАНИМАЕТ В 2 РАЗА БОЛЬШЕ МЕСТА ЧЕМ ДОЛЖНО БЫТЬ ?????????? //Очистили SetLength(byte_arr,0); end; подскажите где я ошибаюсь |
Сообщ.
#2
,
|
|
|
Размер массива учитывается дважды, т.е. "Память + Виртуальная память" учитывает размер два раза.
Почитайте, что конкретно имеется ввиду под этими терминами. Добавлено Короче, складывать их нельзя. Все равно что сложить брутто и нетто, вес товара с упаковкой и без, ясно что в этом смысла не много. |