Нет. Нет. Вам нужно сделать это из пространства ядра.
Если вы говорите «нам нужно сделать это из пространства пользователя» - без каких-либо действий в пространстве ядра это не имеет особого смысла - потому что программа из пространства пользователя не может контролировать или даже знать , если основная память является смежной или нет.
Единственная причина, по которой вам нужно было бы это сделать, - это если вы работали в сочетании с аппаратным обеспечением или каким-либо другим низкоуровневым (то есть ядром) сервисом, которому требовалось это требование. Итак, еще раз, вам придется иметь дело с этим на этом уровне.
Таким образом, ответ не просто «вы не можете», но «вы никогда не должны».
Я написал такие менеджеры памяти, что do позволяют мне это делать - но это всегда было из-за некоторой основной проблемы на уровне ядра, которая должна была быть решена на уровне ядра. Обычно потому, что какой-то другой агент на шине (PCI-карта, BIOS или даже другой компьютер через интерфейс RDMA) имел физическую непрерывную потребность в памяти. Опять же, все это должно было решаться в пространстве ядра.
Когда вы говорите о «строках кэша» - вам не о чем беспокоиться. Вы можете быть уверены, что каждая страница вашей памяти пользовательского пространства является смежной, и каждая страница намного больше строки кэша (независимо от того, о какой архитектуре вы говорите) .