使用C / C ++中的有限主内存编辑10gb文件

时间:2011-01-30 16:15:12

标签: c++ c sorting file-io

我需要使用100mb的内存尽快对包含数字列表的10gb文件进行排序。 我把它们分成几块然后合并它们。

我目前正在使用C文件指针,因为它们比c ++文件i / o更快(至少在我的系统上)。

我尝试了1gb文件并且我的代码工作正常,但是在打开10gb文件后,只要我fscanf就会抛出分段错误。

FILE *fin;
FILE *fout;
fin = fopen( filename, "r" );
while( 1 ) {
    // throws the error here
    for( i = 0; i < MAX && ( fscanf( fin, "%d", &temp ) != EOF ); i++ ) {
        v[i] = temp;
    }

我应该使用什么?

对于如何以最佳方式解决这个问题,您有什么建议吗?

1 个答案:

答案 0 :(得分:5)

这种称为外部排序的算法有一类特殊的算法。有一种合并排序的变体,它是一种外部排序算法(只需google用于合并排序磁带)。

但如果您使用的是Unix,那么在单独的进程中运行 sort 命令可能会更容易。

顺便说一句。打开大于2 GB的文件需要大量文件支持。根据您的操作系统和库,您需要定义宏或调用其他文件处理函数。