"Шаровая" оперативка, Или программное увеличение оперативной памяти, Fpc |
"Шаровая" оперативка, Или программное увеличение оперативной памяти, Fpc |
Bokul |
27.12.2006 6:04
Сообщение
#1
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Заинтересовал? Вот они - чудо компиляторы...
Запускаем код и радуемся результатам:
Системный блок раскручивать необязательно - все изменения проходят на программном уровне. P.S. Не знаю как энергия, но память из ниоткуда можно получить.. Fpc is the best P.P.S. Причина, наверно, кроется вот в чем: Т.е. тип cardinal, возвращаемый методом TotalFree, не имеет постоянного размера, и меняется в зависимости от присваиваемого значение. Имхо. Так вот, вопрос: как в Fpc измерять разницу свободной памяти до и после размещения в ней данных, без всяких таких казусов? Сообщение отредактировано: Bokul - 27.12.2006 6:39 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
29.12.2006 11:06
Сообщение
#2
|
Гость |
Bokul, доки внимательно читал?
Цитата(prog.pdf) 8.4.3 Debugging the heap ну, и близлежащие параграфы...Free Pascal provides a unit that allows you to trace allocation and deallocation of heap memory: heaptrc. If you specify the -gh switch on the command-line, or if you include heaptrc as the first unit in your uses clause, the memory manager will trace what is allocated and deallocated, and on exit of your program, a summary will be sent to standard output. |
Bokul |
29.12.2006 19:45
Сообщение
#3
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Ясно, GetHeapStatus для этих целей не годится - надо юзать модуль heaptrc
Вот в таком формате heaptrc выдает свой заголовок (а потом еще 200 метров отчета): Цитата Heap dump by heaptrc unit 1010000 memory blocks allocated : 12840000/16880000 - что значат выделенные числа? 10000 memory blocks freed : 840000/880000 - что значат выделенные числа? 1000000 unfreed memory blocks : 12000000 True heap size : 80216064 (80 used in System startup) True free heap : 215984 Should be : 8215984 Цитата It displays the total memory used, and then dumps a list of blocks that were allocated but not freed На что надо смотреть? На unfreed memory blocks? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
29.12.2006 20:19
Сообщение
#4
|
Гость |
Цитата На что надо смотреть? На unfreed memory blocks? В принципе - да, именно это показывает тебе, есть ли у тебя утечки... Так вот, если утечек нет - то нет ничего кроме заголовка...Насчет цифр - Цитата 12840000/16880000 Первая - это количество байт, запрошенных компилятором, вторая - число выделенных байт (с учетом гранулярности - ибо память выделяется блоками по 8 байт, и запросив 1 байт ты получишь 8) |
Bokul |
29.12.2006 21:58
Сообщение
#5
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Ага, спасибо!
Цитата (с учетом гранулярности - ибо память выделяется блоками по 8 байт, и запросив 1 байт ты получишь 8 Или 16.. Цитата Each time the block is allocated, its size is normalized to have granularity of 16 bytes Так что на самом деле дает GetHeapStatus.TotalFree? Для чего возвращаемый результат может иметь разный размер и как узнать весь объем доступной памяти? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
29.12.2006 22:32
Сообщение
#6
|
Гость |
Цитата как узнать весь объем доступной памяти Ха... Что значит "весь объем"?Цитата(prog.pdf) 8.7 Memavail and Maxavail The old Turbo Pascal functions MemAvail and MaxAvail functions are no longer available in Free Pascal as of version 2.0. The reason for this incompatibility is below: On modern operating systems the idea of "Available Free Memory" is not valid for an application. The reasons are: 1. One processor cycle after an application asked the OS how much memory is free, another application may have allocated everything. 2. It is not clear what "free memory" means: does it include swap memory, does it include disk cache memory (the disk cache can grow and shrink on modern OS’es), does it include memory allocated to other applications but which can be swapped out, etc. Итак, что будем считать всей памятью? |
Bokul |
29.12.2006 22:45
Сообщение
#7
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Цитата 2. It is not clear what "free memory" means: does it include swap memory, does it include disk cache memory (the disk cache can grow and shrink on modern OS’es), does it include memory allocated to other applications but which can be swapped out, etc. Ага, при тестировании той проги при количестве полигонов больше миллиона комп начинал жутко тормозить, а индикатор обращения к винту не утихал - размер кеша доходил до 2 гиг. Цитата Итак, что будем считать всей памятью? Задам вопрос по-другому: как проверит при запуске программы доступно ли для ее работы, например, гигабайт памяти? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
29.12.2006 22:55
Сообщение
#8
|
Гость |
А это тебе никто не скажет... У тебя swap-файл какой разрешен? Сколько физической памяти стоит? Сколько ее свободно в момент запуска программы? Даже если свободно больше физической памяти, чем ты указал, то кто сказал, что через секунду после запуска твоей программы не запустится, скажем, антивирус, или какой-нибудь сервис с более высоким приоритетом, и не сожрет львиную долю памяти?
|
Текстовая версия | 5.06.2024 10:50 |