Редактирование файла 10 ГБ с использованием ограниченной основной памяти в C / C ++ - PullRequest
3 голосов
/ 30 января 2011

Мне нужно как можно быстрее отсортировать файл размером 10 ГБ, содержащий список чисел, используя только 100 МБ памяти.Я разбиваю их на куски, а затем объединяю их.

В настоящее время я использую указатели файлов C, поскольку они работают быстрее, чем операции ввода-вывода файлов c ++ (по крайней мере, в моей системе).

Я пыталсядля файла 1 ГБ, и мой код работает нормально, но он выдает ошибку сегментации, как только я fscanf после открытия файла 10 ГБ.

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 Ответ

5 голосов
/ 30 января 2011

Для этого существует специальный класс алгоритмов, называемый внешняя сортировка . Существует вариант сортировка слиянием , который является алгоритмом внешней сортировки (просто Google для лента сортировки слиянием ).

Но если вы работаете в Unix, возможно, проще запустить команду sort в отдельном процессе.

КСТАТИ. Открытие файлов размером более 2 ГБ требует поддержки больших файлов. В зависимости от вашей операционной системы и ваших библиотек вам необходимо определить макрос или вызвать другие функции обработки файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...