我正在使用以下代码将文件读入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) ;
如果数组是一个局部变量,你将会得到一个堆栈溢出,因为它不适合堆栈。 分配堆上的“数组”,直接使用new
或间接通过使用std::vector
。
或者使用内存映射。 请参阅mmap
函数。
而不是分配堆栈上的字符数组,我会尝试使用std::vector
,它将在堆上动态分配:
std::vector<char> buffer(fileSize); is.read(&buffer[0], fileSize);
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的日志文件中