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