OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 15 Декабрь, 2017 20:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 06 Май, 2013 14:02 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 118
Откуда: Питер
В программе (см. attachment) ARRAY OF ARRAY OF LONGREAL размещается
в куче несколько раз. Это приводит к утечке памяти. Размер массива довольно большой.


Вложения:
Bug.rar [6.37 КБ]
Скачиваний: 79
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Май, 2013 15:57 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
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
 36338360
 36338360
 72594800
 72594800
 108851240
 108851240
 145107680
 145107680
 145107680
 145107680
А вот, скажем, на 27 (см. выше) вполне неплохо работает.

Так что, это не утечка, а фрагментация. Выделяйте блоки меньшего размера.

Например, можно изменить определение типа Field на вот такое:
Код:
TYPE
  Row = POINTER TO ARRAY OF LONGREAL;
  Field = POINTER TO ARRAY OF Row;
В этом случае код работает медленнее, но, скажем, при factor = 27 максимум потребляемой памяти гораздо ниже:
Код:
БЫЛО
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 всё прекрасно работает:
Код:
factor =  50
 536906872
 537350616
 537425560
 537503992
 537487608
 537520376
 537549656
 537491096
 537520376
 537553144
Вложение:
XdsMemFragmFixed.zip [1.79 КБ]
Скачиваний: 81


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Май, 2013 16:44 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 118
Откуда: Питер
Какая же это фрагментация, если одномоментно существует только один указатель на массив, а объём используемой памяти постоянно растёт?
Именно утечка...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB