代码需要查找和处理还没有在embedded-linux上处理的文件。getDir 用于返回目录的排序内容。下面的代码在处理了几十个或可能超过 100 个文件后完美运行,但随后因 oom-killer 而死。这是使用 c++ 向量(循环向量内的循环向量)的坏方法吗?这种方法可能会导致 oom-killer 吗?是否有另一种方法可以在不爆炸的情况下起作用?每个向量超出范围时不应该被销毁吗?是否需要使用 new/delete 来代替?另外:用于查找内存泄漏的 valgrind 未集成在此处理器 (TI DM368) 的 sdk 中,但代码非常短且没有新语句。笔记:实际代码会检查 sql 数据库中已处理的文件,但此代码仍会导致 oom-killer,其中 sql 代码已被注释掉,因此为简单起见将其省略。文件路径格式为 /YYYYmmdd/HH/MMSS.SS.ext。
void getDir (string dir, vector<string> &files) {
...
while ((dirp = readdir(dp)) != NULL) {
files.push_back(string(dirp->d_name));
closedir(dp);
sort(files.begin(), files.end());
while (true) {
vector<string> days;
getDir(database_location, days);
for (uint d=0; d<days.size(); d++) {
vector<string> hours;
getDir(database_location+days[d], hours);
for (uint h=0; h<hours.size(); h++) {
vector<string> files;
string dir = database_location+days[d]+"/"+hours[h];
getDir(dir, files);
for (uint f=0; f<files.size(); f++) process(dir, files[f]);