После изменения структуры данных с diffarray на vector память взрывается (увеличивается бесконечно) во время одного из тестов QuickCheck.
Код размещен на GitHub . В ветке dev содержится плохой код, а основной работает хорошо. Помимо незначительных изменений, единственный коммит, который может на это повлиять, это один . Для запуска процедур QuickCheck необходимо запустить исполняемый файл tester . Кажется, что векторы небольшой длины не приводят к сбою программы, но когда она становится длиннее, программа замедляется и, наконец, увеличивает объем памяти.
Другая вещь, которая меня заинтриговала, это то, что у меня возникла похожая проблема в других моих библиотеках при рендеринге файлов XML. Для маленьких файлов (<400 КБ) он работает медленно, но без сбоев, а для больших файлов память взрывается. Data.Vector также участвует в этой библиотеке. У меня есть интуиция, эти проблемы связаны. </p>
Редактировать: Я наконец выделил часть своего кода, которая воспроизводит утечку памяти, и поместил ее в один файл, который можно найти здесь . Теперь я использую IArray, который ведет себя так же, как и DiffArray. Чтобы чередовать IArray и Vector, нужно изменить строки 49, 93 и 101.