Проясните ситуацию, пожалуйста:
В программе выделяем массив размером 1ГБ. В виртуальном адресном пространстве программы он будет выделен в виде непрерывной области.
Если overcommit разрешается, то в C++ выделение по new вернет исключение, только если не нашлось даже виртуальной памяти. Так?
Теперь начинаем обращаться к адресам этого массива. Ядро будет выделять память страницами, и совсем не факт, что эти страницы будут лежать последовательно. Так?
При последовательном проходе по массиву CPU начнет выполнять prefetching следующих данных. Это делается по виртуальным или по физическим адресам? Будет ли сбиваться prefetch на границах физических страниц памяти, которые лежат не последовательно?
Можно ли гарантировать непрерывность в физической памяти другими способами кроме hugepage?
Спасибо.