C++将文件读取到字符数组中

C++ Reading File into Char Array

本文关键字:字符 数组 读取 文件 C++      更新时间:2023-10-16

我使用以下代码将文件读入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函数。

我不是在

堆栈上分配 char 数组,而是尝试使用 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

将执行时间打印到称为输出的日志文件中.log