我使用以下代码将文件读入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) ;
答案 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
的日志文件中