C ++将文件读入Char数组

时间:2012-11-20 10:14:14

标签: c++ linux gcc ubuntu

我使用以下代码将文件读入chararcter数组。现在,对于小文件(比如2 MB),它正在正常执行但是对于大文件(140 MB),在我的18 GB UBUNTU服务器中,它正在提供segmentation fault。任何人都可以帮我解决这个问题吗?我认为18 GB就足以将240 MB的文件保存到内存中。我使用64位UBUNTU并使用g ++进行编译。

ifstream is;

char chararray [fileSize] ;

is.read(chararray, fileSize) ;

3 个答案:

答案 0 :(得分:5)

如果数组是局部变量,则会出现堆栈溢出,因为它不适合堆栈。而是在堆上分配“数组”,直接使用new或使用std::vector间接分配。

或使用内存映射。请参阅mmap功能。

答案 1 :(得分:2)

我没有在堆栈上分配char数组,而是尝试使用std::vector,它将在上动态分配:

std::vector<char> buffer(fileSize);
is.read(&buffer[0], fileSize);

答案 2 :(得分:1)

GCC编译器有一个名为size的默认命令!使用GCC编译器编译程序。然后你可以得到文件大小!

gcc -Wall test.c
size

这是一个普通的C程序!由于您没有指定参数,因此将./a.out作为其默认参数!

如果您必须应用一些优化,代码将如下所示..

praveenvinny@ubuntu:~/Project/New$> gcc -Wall -o1 -fauto-inc-dec test.c -o Output
praveenvinny@ubuntu:~/Project/New$> size output
text       data     bss     dec     hex filename
1067       256      8       1331    533 output

使用文本部分代码大小。 如果您还想考虑全局数据大小,可以使用数据和bss。

这将打印代码大小

time -f "%e" -o Output.log ./a.out

将执行时间打印到名为Output.log

的日志文件中