Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为rapidjson readBuffer设置适当的大小 我一直在使用Rabijson在我的C++项目中,我已经知道如何使用它来满足我的项目需求。但在清理代码时,我发现我只是为缓冲区大小分配了一个随机数_C++_Visual Studio_Rapidjson - Fatal编程技术网

为rapidjson readBuffer设置适当的大小 我一直在使用Rabijson在我的C++项目中,我已经知道如何使用它来满足我的项目需求。但在清理代码时,我发现我只是为缓冲区大小分配了一个随机数

为rapidjson readBuffer设置适当的大小 我一直在使用Rabijson在我的C++项目中,我已经知道如何使用它来满足我的项目需求。但在清理代码时,我发现我只是为缓冲区大小分配了一个随机数,c++,visual-studio,rapidjson,C++,Visual Studio,Rapidjson,charreadbuffer[80000]; rapidjson::FileReadStream readStream(文件,readBuffer,sizeof(readBuffer)) 有没有合适的方法来设置readBuffer需要多大 FileReadStream为每个内部迭代将字节块读入用户提供的缓冲区。通过使用这个流概念,它不需要将整个JSON文件读入内存 缓冲区大小可能会影响性能,但不会影响正确性 “最佳”缓冲区大小取决于平台和应用程序 如果大小太小,则会由于fread()调用的数量增

charreadbuffer[80000];
rapidjson::FileReadStream readStream(文件,readBuffer,sizeof(readBuffer))


有没有合适的方法来设置readBuffer需要多大

FileReadStream
为每个内部迭代将字节块读入用户提供的缓冲区。通过使用这个流概念,它不需要将整个JSON文件读入内存

缓冲区大小可能会影响性能,但不会影响正确性

“最佳”缓冲区大小取决于平台和应用程序

如果大小太小,则会由于
fread()
调用的数量增加而产生更多的开销

通常,用户可能会使用程序堆栈(如您的示例中)作为该缓冲区,所以它不能太大,因为堆栈大小是有限的。对于一些使用大量线程的嵌入式系统或应用程序来说,在堆栈上使用大缓冲区可能是一个更大的问题

总有一些参数可能会影响性能。如果您的应用程序确实需要最佳性能,我认为最好的方法是进行实验。否则,我认为4096(大多数平台的页面大小)或更高就可以了

顺便说一下,RapidJSON是开源的,这个类非常简单。只要读一下,你就会知道缓冲区是如何使用的


另外,在这里使用
矢量
不是一种好的做法。As
vector
需要堆分配,这里只需要固定大小。使用程序堆栈更便宜。

向量始终是最佳选择,它可以轻松地动态设置为数据大小。您能详细说明吗?你的意思是这样的吗?”std::vectorreadBuffer;'因为您使用的是char readBuffer[80000];它将在矢量中转换为矢量读取缓冲区;(零尺寸,以后可以更改)。对。我知道你在做什么。但问题是,'FileReadStream'期望第二个参数是char*,它不能将向量转换为char*。还有其他建议吗?我已经了解了其他项目如何使用FileReadStream,它们都使用char buf[65536]。这就是神奇的数字吗?还是我遗漏了什么?所以,我接受了你的建议,将缓冲区大小设置为4096。一般来说,我主要是用它来读取设置文件,这些文件不会变得太大。谢谢