gpt4 book ai didi

c++ - 如何在RapidJSON中重用Stack Allocator而不重新分配内存

转载 作者:行者123 更新时间:2023-12-03 06:55:16 27 4
gpt4 key购买 nike

我在FreeRTOS中运行的单线程系统资源有限。
我已经为RapidJSON分配器预先分配了缓冲区:

char            valueBuffer[2048];
char parseBuffer[1024];
rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> valueAllocator (valueBuffer, sizeof(valueBuffer))
rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> parseAllocator (parseBuffer, sizeof(parseBuffer));
我的问题是,每次使用其中一个分配器时,除非清除它们,否则其大小会不断增加(并在必要时分配新的内存)。在分配器上调用 Clear()的问题在于,下一次调整分配器的大小时会再次调用 Malloc,我想避免这种情况。
有没有一种方法可以简单地重用现有的预分配内存,例如,通过将分配器的大小设置回零?

最佳答案

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

void Reset()
{
chunkHead_->size = 0;
chunkHead_->next = 0;
}
每次处理完最后一个已解析的字符串时应调用该方法。

关于c++ - 如何在RapidJSON中重用Stack Allocator而不重新分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64164651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com