我需要使用100mb的内存尽可能快地对包含数字列表的10 as文件进行排序。我将它们分成块,然后将它们合并。
我目前使用的是C文件指针,因为它们比c++文件I/O更快(至少在我的系统上是这样)。
我尝试了一个1 1gb的文件,我的代码运行良好,但在打开10 1gb的文件后,我一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;
}我应该用什么来代替呢?
关于如何以最好的方式去做这件事,你有什么建议吗?
发布于 2011-01-31 00:21:11
为此,有一类特殊的算法,称为外部排序。有一种合并排序的变体,它是一种外部排序算法(只需在google上搜索合并排序磁带)。
但是如果您使用的是Unix,那么在单独的进程中运行sort命令可能会更容易一些。
顺便说一句。打开大于2 GB的文件需要大文件支持。根据您的操作系统和库,您需要定义宏或调用其他文件处理函数。
https://stackoverflow.com/questions/4843910
复制相似问题