如何解决如何在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 举报,一经查实,本站将立刻删除。