微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在RapidJSON中重用Stack Allocator而不重新分配内存

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

我已经为RapidJSON分配器预先分配了缓冲区:

INSERT INTO new_table SELECT * FROM current_table;

我遇到的问题是,每次使用其中一个分配器时,除非清除它们,否则其大小会不断增加(并在必要时分配新的内存)。在分配器上调用char valueBuffer[2048]; char parseBuffer[1024]; rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> valueAllocator (valueBuffer,sizeof(valueBuffer)) rapidjson::MemoryPoolAllocator<FreeRTOSRapidJSONAllocator> parseAllocator (parseBuffer,sizeof(parseBuffer)); 的问题在于,Clear()在下一次调整分配器大小时再次被调用,我想避免这种情况。

是否有一种方法可以简单地重用现有的预分配内存,例如将分配器的大小设置回零?

解决方法

我通过创建一个自定义分配器解决了这个问题。本质上是 import scala.util.Random val nRows = 10000 val seq = for (_ <- 1 to nRows) yield (Random.nextInt(nRows),Random.nextInt(nRows),Random.nextInt(nRows)) val df = seq.toDF("a","b","c","d","e","f","g","h","i","j","k","l","m") df.show() 的副本,另外还添加了以下方法:

rapidjson::MemoryPoolAllocator

每次解析完最后一个字符串后,应调用哪个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。