如何在 RapidJSON 中重用堆栈分配器而不重新分配内存

Cig*_*lée 6 c++ rapidjson

我正在 FreeRTOS 中运行资源有限的单线程系统。

我已经为 RapidJSON 分配器预分配了缓冲区,如下所示:

char            valueBuffer[2048];
char            parseBuffer[1024];
rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> valueAllocator (valueBuffer, sizeof(valueBuffer))
rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> parseAllocator (parseBuffer, sizeof(parseBuffer));
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,每次使用其中一个分配器时,其大小都会不断增加(并在必要时分配新内存),除非它们被清除。Clear()调用分配器的问题是Malloc,当下次调整分配器大小时,会再次调用分配器,这是我想避免的。

有没有办法简单地重用现有的预分配内存,例如将分配器的大小设置回零?

Cig*_*lée 2

我通过创建自定义分配器解决了这个问题。本质上是一个副本rapidjson::MemoryPoolAllocator,添加了以下方法:

void Reset()
{
    chunkHead_->size = 0;
    chunkHead_->next = 0;
}
Run Code Online (Sandbox Code Playgroud)

每次解析完最后一个字符串时都应该调用它。