gpt4 book ai didi

c++ - 读取大文件(超过 1GB)时如何克服内存错误 -- C/C++

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:39 25 4
gpt4 key购买 nike

我正在尝试读取一个超过 1GB 的文件(其中有 1,157,421,364 字节),当使用 fread() 函数时会出现内存错误,但当我使用 fgets() 函数时效果很好。注意:我混合使用了 C 和 C++..

谁能帮我克服这个内存错误,我是不是做错了什么?

提前致谢...

错误是“内存错误”


#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <cstring>

void read_file2(FILE* readFilePtr){
long file_size;

fseek(readFilePtr, 0L, SEEK_END);
file_size = ftell(readFilePtr);
rewind(readFilePtr);

char *buffer;
buffer = (char*) malloc (sizeof(char)*file_size);
if (buffer == NULL) {
fputs("Memory Error", stderr);
exit(2);
}
long lines = 0;
if (fread(buffer, 1, file_size, readFilePtr) != file_size){
fputs("Reading Error", stderr);
exit(1);
}
char *p = buffer;
while (p = (char*) memchr(p, '\n', (buffer + file_size) - p)){
++p;
++lines;
}
printf("Num of lines %ld\n", lines);
free(buffer);
}

int main(int argc, char** argv){
clock_t begin_time, end_time;
float time_consumed;

begin_time = clock();

FILE* inputFilePtr = fopen(argv[1], "rb");

if(inputFilePtr == NULL){
printf("Error Opening %s: %s (%u)\n", argv[1], strerror(errno), errno);
return 1;
}

read_file2(inputFilePtr);

end_time = clock();

time_consumed = ((float)end_time - (float)begin_time)/CLOCKS_PER_SEC;
printf("Time consumed is -- %f\n", time_consumed);
return 0;
}

最佳答案

您可以分块读取文件,而不是将其作为一个整体读取,将所有文件读取到一个分配的缓冲区意味着您的应用程序需要分配大量内存,您真的想要这样吗?。这是假设您不需要一次处理所有内容(在大多数情况下都是如此)。

关于c++ - 读取大文件(超过 1GB)时如何克服内存错误 -- C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com