我正在 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,当下次调整分配器大小时,会再次调用分配器,这是我想避免的。
有没有办法简单地重用现有的预分配内存,例如将分配器的大小设置回零?
我通过创建自定义分配器解决了这个问题。本质上是一个副本rapidjson::MemoryPoolAllocator,添加了以下方法:
void Reset()
{
chunkHead_->size = 0;
chunkHead_->next = 0;
}
Run Code Online (Sandbox Code Playgroud)
每次解析完最后一个字符串时都应该调用它。
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |