C++ C++;“文件操作导致”;“撞车”;关于嵌入式Linux

C++ C++;“文件操作导致”;“撞车”;关于嵌入式Linux,c++,memory,file-io,C++,Memory,File Io,我现在在一个嵌入式led测量系统项目中。它使用ARM和linux,拥有64M内存和1G存储。测量时,它应该将数据写入.csv文件。我是这样做的: 在测量开始前创建/打开文件 在测量回路中,当数据准备就绪时,将其放入文件中,然后进入下一个测量 当用户停止测量时,文件将关闭 但是,当我添加此功能时,程序会持续运行几个小时,然后机器不会响应任何操作(测量停止,UI仍然显示但不响应任何操作,等等)。csv文件大约是15MB。 如果没有这项功能,机器可以全天正常工作。 我想了想,也许是因为内存用完了。有这

我现在在一个嵌入式led测量系统项目中。它使用ARM和linux,拥有64M内存和1G存储。测量时,它应该将数据写入.csv文件。我是这样做的:

  • 在测量开始前创建/打开文件
  • 在测量回路中,当数据准备就绪时,将其放入文件中,然后进入下一个测量
  • 当用户停止测量时,文件将关闭
  • 但是,当我添加此功能时,程序会持续运行几个小时,然后机器不会响应任何操作(测量停止,UI仍然显示但不响应任何操作,等等)。csv文件大约是15MB。 如果没有这项功能,机器可以全天正常工作。 我想了想,也许是因为内存用完了。有这么小的内存,有可能继续写一个文件吗?还是应该在每次写完数据后关闭它?(在这种情况下,我将不得不频繁地打开/关闭文件,这将导致我们的系统运行缓慢,这是我不乐意看到的) 为我糟糕的英语道歉,也许有人能理解并给我一些帮助。 上帝正在照亮你们的道路,谢谢你们

    ps:我相信文件操作本身是正确的

    代码如下所示:

    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;itemIndexout_put您写入“out_put”流,但从不检查流是否仍然有效。
    你可以把它改成

    while (out_put.good() && (!userStoped())
    

    为了向自己证明是对流的写入导致了问题,请注释掉所有度量代码,只需编写大量的“x”(或您选择的字符!)查看是否有相同的结果。

    你能提供相关代码,或者提供一个复制错误的最小示例吗?你能粘贴到你的代码中吗?或者试着找到一个小的可复制的测试用例,你可以粘贴到这里吗?我建议你在嵌入式系统上使用C。你的结果会更好。这里有很多好的理由:。此外,在C++工具中,映射的内存使用量显著增加。@ Matt Counel:再次读取。它是64 MB,不是KB。代码< > ITEMSCUTION/CODE >初始化/递增?