parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Посмотрел

MoKo 10.10.2014 04:49

У нас libgc собирется с конфигом "по умолчанию", заявлено при этом у них так:

# define MAX_HEAP_SECTS 512 /* Roughly 4GB */

Почему по факту эти 512 секций дают всего ~256Mb - сложно сказать. У меня кстати падало на 297596Кб по musage, несколько больше, чем 256Mb. По размеру свободной памяти в логе musage видно, что память у OS действительно выделяется кусками по 8Mb, но таких кусков было ~36, а не 512 (в отладчике же видно, что использованных секций на момент падения 512). Похоже на какую-то багу в libgc.

Если пересобрать gc с -DLARGE_CONFIG (добавляется в NT_STATIC_THREADS_MAKEFILE), то лимит получается сильно больше, во всяком за гигабайт у меня размер аллоцированной памяти успешно переваливал (1130024Кб по musage). Память выделяется кусками по 16Mb.
Но неудобно, что через переменную эти настройки не меняются, только при сборке libgc.

Еще интересно, что парсер, собранный под cygwin, такой проблемы не имеет - успешно дорастает до гигабайта с лимитом по умолчанию в libgc. Правда работает медленнее. :) Но зато на ~15% меньше памяти потребляет...