C++将文件读取到字符数组中
C++ Reading File into Char Array
我使用以下代码将文件读入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
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?