IPB
ЛогинПароль:

> "Шаровая" оперативка, Или программное увеличение оперативной памяти, Fpc
Bokul
сообщение 27.12.2006 6:04
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Заинтересовал? smile.gif Вот они - чудо компиляторы...

Запускаем код и радуемся результатам:

type
ar=array[1..65456] of byte;
ar2=array[1..327600] of byte;
var p:^ar;
p2:^ar2;
begin
writeln('Free memory before allocation: ',GetHeapStatus.TotalFree);
new(p);
writeln('Free memory after allocation: ',GetHeapStatus.TotalFree);
dispose(p);
writeln('Free memory after dispose: ',GetHeapStatus.TotalFree);
new(p2);
writeln('Again allocation: ',GetHeapStatus.TotalFree);
dispose(p2);
writeln('Again dispose: ',GetHeapStatus.TotalFree);
readln;
end.


Системный блок раскручивать необязательно - все изменения проходят на программном уровне.
P.S. Не знаю как энергия, но память из ниоткуда можно получить.. Fpc is the best smile.gif
P.P.S.
Причина, наверно, кроется вот в чем:
Прикрепленное изображение
Т.е. тип cardinal, возвращаемый методом TotalFree, не имеет постоянного размера, и меняется в зависимости от присваиваемого значение. Имхо.
Так вот, вопрос: как в Fpc измерять разницу свободной памяти до и после размещения в ней данных, без всяких таких казусов?

Сообщение отредактировано: Bokul - 27.12.2006 6:39


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 29.12.2006 20:19
Сообщение #2


Гость






Цитата
На что надо смотреть? На unfreed memory blocks?
В принципе - да, именно это показывает тебе, есть ли у тебя утечки... Так вот, если утечек нет - то нет ничего кроме заголовка...

Насчет цифр -
Цитата
12840000/16880000
Первая - это количество байт, запрошенных компилятором, вторая - число выделенных байт (с учетом гранулярности - ибо память выделяется блоками по 8 байт, и запросив 1 байт ты получишь 8)
 К началу страницы 
+ Ответить 
Bokul
сообщение 29.12.2006 21:58
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Ага, спасибо! smile.gif
Цитата
(с учетом гранулярности - ибо память выделяется блоками по 8 байт, и запросив 1 байт ты получишь 8

Или 16..
Цитата
Each time the block is allocated, its size is normalized to have granularity of 16 bytes


Так что на самом деле дает GetHeapStatus.TotalFree? Для чего возвращаемый результат может иметь разный размер и как узнать весь объем доступной памяти?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 31.07.2025 19:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"