我正在将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)