小编fli*_*lip的帖子

大文件上的c ++疯狂内存消耗

我正在将10GB文件加载到内存中,我发现即使我剥离了任何额外的开销并将数据存储在一个数组中,它仍然需要53 GB的内存.这对我来说似乎很疯狂,因为我将一些文本数据转换为longs,占用较少的空间并将其余部分转换为char*,这将占用与文本文件相同的空间量.我正在尝试加载的文件中有大约150M行数据.当我按照下面的方式加载它时,有什么理由可以占用这么多内存吗?

这里有三个文件,一个fileLoader类及其头文件和一个只运行它们的main.回答一些问题:操作系统是UBUNTU 12.04 64位这是一个64GB内存和SSD高清,我为RAM提供了64GB的交换空间我正在加载所有数据,因为速度需要.这对应用程序至关重要.所有排序,索引和大量数据密集型工作都在GPU上运行.另一个原因是一次加载所有数据使我编写代码变得更加简单.我不必担心索引文件,例如,映射到另一个文件中的位置.

这是头文件:

#ifndef FILELOADER_H_
#define FILELOADER_H_
#include <iostream>
#include <fstream>

#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <string>

class fileLoader {
public:
    fileLoader();
    virtual ~fileLoader();
    void loadFile();
private:
    long long ** longs;
    char *** chars;
    long count;
    long countLines(std::string inFile);
};


#endif /* FILELOADER_H_ */
Run Code Online (Sandbox Code Playgroud)

这是CPP文件

#include "fileLoader.h"



fileLoader::fileLoader() {
    // TODO Auto-generated constructor stub
    this->longs = NULL;
    this->chars = NULL;
}

char ** split(char * line,const char * delim,int size){
    char ** val = new …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-leaks memory-management ubuntu-12.04

7
推荐指数
1
解决办法
3467
查看次数