解决方法
不,那里没有.您需要从内核空间中执行此操作.
如果你说“我们需要从用户空间”这样做 – 在内核空间中没有任何事情就没有意义 – 因为用户空间程序无法控制,甚至不知道底层内存是否连续.
您需要执行此操作的唯一原因是 – 如果您正在与一块硬件或需要此需求的其他一些低级(即内核)服务配合使用.那么再一次,你必须在这个层面上处理它.
所以答案不只是“你不能” – 而是“你永远不需要”.
我已经写过这样的内存管理器,让我可以做到这一点 – 但是它总是因为内核层面的一些基本问题,这在内核层面必须被解决.通常因为总线上的其他一些代理(PCI卡,BIOS,甚至是通过RDMA接口的另一台计算机)具有物理连续的内存要求.再次,所有这一切都必须在内核空间中解决.
当你谈论“缓存行”时,你不用担心.您可以放心,用户空间内存的每个页面都是连续的,每个页面都比缓存行大得多(无论您在讨论什么架构).