C++ C++;“文件操作导致”;“撞车”;关于嵌入式Linux
我现在在一个嵌入式led测量系统项目中。它使用ARM和linux,拥有64M内存和1G存储。测量时,它应该将数据写入.csv文件。我是这样做的:C++ C++;“文件操作导致”;“撞车”;关于嵌入式Linux,c++,memory,file-io,C++,Memory,File Io,我现在在一个嵌入式led测量系统项目中。它使用ARM和linux,拥有64M内存和1G存储。测量时,它应该将数据写入.csv文件。我是这样做的: 在测量开始前创建/打开文件 在测量回路中,当数据准备就绪时,将其放入文件中,然后进入下一个测量 当用户停止测量时,文件将关闭 但是,当我添加此功能时,程序会持续运行几个小时,然后机器不会响应任何操作(测量停止,UI仍然显示但不响应任何操作,等等)。csv文件大约是15MB。 如果没有这项功能,机器可以全天正常工作。 我想了想,也许是因为内存用完了。有这
std::ofstream out_put;
out_put.open(filePath, std::ofstream::out | std::ofstream::trunc);
while(!userStoped()){
doSomeMesuring();
for(int itemIndex = 0; itemIndex < itemCount; ++itemIndex){
out_put << ',' << itemName.toStdString() << ','
<< data->mdata.item[itemIndex].mvalue << ','
<< data->mdata.item[itemIndex].judge << std::endl;
}
}
out_put.close();
std::流输出;
out|put.open(文件路径,std::ofstream::out | std::ofstream::trunc);
而(!userStoped()){
剂量测量();
对于(int-itemIndex=0;itemIndex out_put您写入“out_put”流,但从不检查流是否仍然有效。
你可以把它改成
while (out_put.good() && (!userStoped())
为了向自己证明是对流的写入导致了问题,请注释掉所有度量代码,只需编写大量的“x”(或您选择的字符!)查看是否有相同的结果。你能提供相关代码,或者提供一个复制错误的最小示例吗?你能粘贴到你的代码中吗?或者试着找到一个小的可复制的测试用例,你可以粘贴到这里吗?我建议你在嵌入式系统上使用C。你的结果会更好。这里有很多好的理由:。此外,在C++工具中,映射的内存使用量显著增加。@ Matt Counel:再次读取。它是64 MB,不是KB。代码< > ITEMSCUTION/CODE >初始化/递增?