Скорее всего, это время, необходимое для сбоя кодовых страниц. Есть несколько способов избежать этой задержки, если это действительно необходимо.Самое простое - периодически запускать gcc
.Другой вариант - установить gcc
на RAM-диск.
Другой подход - составить список задействованных файлов, а затем написать простую программу для блокировки всех этих файлов в памяти.Вы можете использовать что-то вроде:
strace -f gcc *rest of gcc command* 2>&1 | grep open | grep -v -- -1
Используйте командную строку GCC, которая типична для того, как вы используете GCC.
Там вы найдете библиотеки и исполняемые файлы, которые там открываются.Составьте полный список в файле.Затем напишите программу, которая вызывает mlockall(MCL_FUTURE)
, а затем читает имена файлов из файла.Для каждого файла mmap
запишите его в память и прочитайте каждый байт.Затем пусть программа просто спит вечно (или пока не будет уничтожен).
Это приведет к форсированию каждой страницы каждого файла в памяти.Вы должны проверить общий размер всех этих файлов и убедиться, что это не значительная часть объема памяти, который у вас есть на самом деле!
Кстати, раньше существовало нечто, называемое sticky bit который сделал что-то подобное.Если по какой-то причине ваша платформа поддерживает это, просто установите его для всех используемых файлов.(Хотя это традиционно приводило к тому, что файлы сохранялись в режиме подкачки, что в современной системе не ускоряет процесс.)