Я успешно воспроизвел в Ubuntu. Мой json размер данных около 1,4 КБ, но я анализировал эти json данные много раз. Вот мой результат теста:
Перед запуском:
KiB Mem : 8167476 total, 5461204 free, 284120 used, 2422152 buff/cache
1000 times:
KiB Mem : 8167476 total, 5456600 free, 288724 used, 2422152 buff/cache
10000 times:
KiB Mem : 8167476 total, 5405916 free, 339376 used, 2422184 buff/cache
100000 times:
KiB Mem : 8167476 total, 4893176 free, 852104 used, 2422196 buff/cache
After input the int (After run)
KiB Mem : 8167476 total, 5462208 free, 283116 used, 2422152 buff/cache
Действительно, есть проблема, но это оптимизация с помощью распределителя (вероятно, glib c в моем случае) и не относится к библиотеке.
Если я добавлю malloc_trim (0) в моем коде:
while (!jsons.empty()) {
jsons.pop_back();
}
+ malloc_trim(0);
}
Я найду, что все будет хорошо. В windows мы не можем воспроизвести, потому что мы используем не glib c, я думаю.
Другой тест: я написал другую программу для mallo c много маленькой памяти с glib c, и проблема останется живой. Моя программа не связана с библиотекой, она просто mallo c и освобождает много маленькой памяти .
В любом случае, проблема не связана с библиотекой. Если мы добавим в библиотеку malloc_trim (0) , во время синтаксического анализа будет много вызовов, что снизит производительность. Поэтому лучшее решение - добавить malloc_trim (0) в вашем коде.