C++ 嵌入式系统中读取文件的内存碎片
我在带有Linux操作系统的嵌入式系统上有一个配置文本文件。 要求文件为文本,嵌入式系统具有 32兆字节的动态ram。应用程序。这将读取文件在C++中编码。 可以使用这样的方法读取文件C++ 嵌入式系统中读取文件的内存碎片,c++,embedded-linux,C++,Embedded Linux,我在带有Linux操作系统的嵌入式系统上有一个配置文本文件。 要求文件为文本,嵌入式系统具有 32兆字节的动态ram。应用程序。这将读取文件在C++中编码。 可以使用这样的方法读取文件 #include <string> #include <fstream> ifstream infile ("config_file_path"); if (infile.good()) { string line; // Set capacity to l
#include <string>
#include <fstream>
ifstream infile ("config_file_path");
if (infile.good())
{
string line;
// Set capacity to length of the longest line.
const unsigned char maxLen = 100;
line.reserve (maxLen);
while (std::getline (infile, line))
{
// Process the data in the line.
processData (line);
}
}
#包括
#包括
ifstream infle(“配置文件路径”);
if(infle.good())
{
弦线;
//将容量设置为最长线路的长度。
常量无符号字符maxLen=100;
线路储备(maxLen);
while(std::getline(infle,line))
{
//处理行中的数据。
过程数据(行);
}
}
堆碎片会是这个实现的一个问题吗?
该文件最多可读取150行文本。很难说你的应用程序是否因代码而出现内存碎片。(您的代码可能会添加一些碎片,但我不知道它有多重要) 您可以尝试使用非标准malloc库- 杰马洛克 内德马洛克 tcmalloc 它们可能为您提供更好的对象布局以及转储内存布局的能力 一般做法: 检查应用程序是否可以获得“内存不足”。压力测试可能会有所帮助。 检查你的应用程序有多少可用内存以及它的碎片化程度。 如果碎片是问题所在-请尝试以下操作: 堆遵循后进先出原则(删除最后创建的块)。尝试将变量保留在堆栈上。使用专门的分配器 对于您的功能: 为了最小化堆压力,可以尝试将行读入堆栈缓冲区(例如,使用FGET) 堆碎片会是这个实现的一个问题吗 在显示的示例中,我无法识别指示堆碎片的行 您使用的是
std::string
对象,其内部机制通常被认为是不可预测的,即对象将增长多大以及何时释放内存,仅此而已
std::string
特定成员函数等