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