OberonCore https://forum.oberoncore.ru/ |
|
XDS: Утечка памяти при размещении массива https://forum.oberoncore.ru/viewtopic.php?f=30&t=4343 |
Страница 1 из 1 |
Автор: | GameHunter [ Понедельник, 06 Май, 2013 14:02 ] | ||
Заголовок сообщения: | XDS: Утечка памяти при размещении массива | ||
В программе (см. attachment) ARRAY OF ARRAY OF LONGREAL размещается в куче несколько раз. Это приводит к утечке памяти. Размер массива довольно большой.
|
Автор: | Александр Ильин [ Понедельник, 06 Май, 2013 15:57 ] |
Заголовок сообщения: | Re: XDS: Утечка памяти при размещении массива |
GameHunter писал(а): В программе (см. attachment) ARRAY OF ARRAY OF LONGREAL размещается Добавил вывод значения factor и запустил со значениями 27..30:в куче несколько раз. Это приводит к утечке памяти. Размер массива довольно большой. Код: D:\AlexIljin\XdsMemLeakBug>Example.exe Судя по всему, из-за большого объёма блока просто-напросто накапливается фрагментация кучи.factor = 27 156396648 312711376 312711376 469026104 469026104 469026104 469026104 469026104 469026104 469026104 D:\AlexIljin\XdsMemLeakBug>Example.exe factor = 28 168187040 336292160 336292160 504397280 504397280 672502400 504397280 672502400 504397280 672502400 D:\AlexIljin\XdsMemLeakBug>Example.exe factor = 29 180406072 360730224 360730224 541054376 360730224 541054376 360730224 541054376 360730224 541054376 D:\AlexIljin\XdsMemLeakBug>Example.exe factor = 30 193053744 386025568 386025568 578997392 #RTS: unhandled exception #18: out of heap space File errinfo.$$$ created. На значении 13 видно, как система постепенно идёт вразнос: Код: factor = 13 А вот, скажем, на 27 (см. выше) вполне неплохо работает.36338360 36338360 72594800 72594800 108851240 108851240 145107680 145107680 145107680 145107680 Так что, это не утечка, а фрагментация. Выделяйте блоки меньшего размера. Например, можно изменить определение типа Field на вот такое: Код: TYPE В этом случае код работает медленнее, но, скажем, при factor = 27 максимум потребляемой памяти гораздо ниже:Row = POINTER TO ARRAY OF LONGREAL; Field = POINTER TO ARRAY OF Row; Код: БЫЛО Да и при factor = 50 всё прекрасно работает:factor = 27 156396648 312711376 312711376 469026104 469026104 469026104 469026104 469026104 469026104 469026104 СТАЛО factor = 27 156875712 157114288 157089600 157130672 157130672 157147056 157147056 157163440 157163440 157179824 Код: factor = 50 536906872 537350616 537425560 537503992 537487608 537520376 537549656 537491096 537520376 537553144 Вложение:
|
Автор: | GameHunter [ Понедельник, 06 Май, 2013 16:44 ] |
Заголовок сообщения: | Re: XDS: Утечка памяти при размещении массива |
Какая же это фрагментация, если одномоментно существует только один указатель на массив, а объём используемой памяти постоянно растёт? Именно утечка... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |