Я реализовал несколько алгоритмов сортировки (для сортировки целых чисел) в C, осторожно используя uint64_t
для хранения всего, что имеет отношение к размеру данных (таким образом, также счетчики и прочее), поскольку алгоритмы также должны быть проверены с наборами данных из нескольких гига целых чисел.
Алгоритмы должны быть хорошими, и не должно быть никаких проблем с количеством выделенных данных: данные хранятся в файлах, и мы загружаем только небольшие порции за раз, все работает нормально, даже когда мы забиваем буферы в памяти для любой размер.
Тесты с наборами данных до 4 Гигабайт (таким образом, 16 ГБ данных) работают нормально (сортировка 4Gint заняла 2228 секунд, ~ 37 минут), но когда мы превышаем это значение (то есть: 8 Gints), алгоритм кажется не остановка (она работает уже около 16 часов).
Боюсь, что проблема может быть связана с переполнением целых чисел, возможно, счетчик в цикле хранится в 32-битной переменной, или, может быть, мы вызываем некоторые функции, которые работают с 32-битными целыми числами.
Что еще это может быть?
Есть ли простой способ проверить, не происходит ли целочисленное переполнение во время выполнения?