草庐IT

c - mremap(2) 与 HugeTLB 改变虚拟地址?

Linuxmremap(2)函数是否可以将从mmap()获得的HugeTLB的虚拟地址更改为新的固定虚拟地址?(背景:我想根据我得到的内存的物理地址重新映射虚拟地址。这是通过直接检查指针地址来有效地执行虚拟地址到物理地址的转换。我将使用内存从DMA到硬件用户空间。)这似乎不适用于我的简单测试程序:#define_GNU_SOURCE#include#include#include#defineLARGE_PAGE_SIZE(1024*1024*1024)intmain(){void*p1;void*p2;p1=mmap(NULL,LARGE_PAGE_SIZE,PROT_READ|PR

c - mremap(2) 与 HugeTLB 改变虚拟地址?

Linuxmremap(2)函数是否可以将从mmap()获得的HugeTLB的虚拟地址更改为新的固定虚拟地址?(背景:我想根据我得到的内存的物理地址重新映射虚拟地址。这是通过直接检查指针地址来有效地执行虚拟地址到物理地址的转换。我将使用内存从DMA到硬件用户空间。)这似乎不适用于我的简单测试程序:#define_GNU_SOURCE#include#include#include#defineLARGE_PAGE_SIZE(1024*1024*1024)intmain(){void*p1;void*p2;p1=mmap(NULL,LARGE_PAGE_SIZE,PROT_READ|PR

c++ - Ubuntu 10.04,将 MAP_HUGETLB 与 MAP_SHARED 一起使用时出错

以下是我在ubuntu中使用大页面映射文件的代码,但此调用失败并出现错误“无效参数”。然而,当我通过mmap中没有文件描述符参数的MAP_ANON标志,然后它就可以工作了。我无法理解这背后的可能原因。其次,我无法理解为什么允许使用MAP_PRIVATE进行文件映射,而此标志本身意味着不会将任何更改写回文件。这始终可以使用MAP_ANON来完成,还是我遗漏了什么?有人可以帮我解决这些问题吗?int32_tmain(int32_targc,char**argv){int32_tmap_length=16*1024*1024;//16MB,hugepagesizeis2MBint32_tpr