如何排除 C 语言中 malloc() 可以返回的虚拟地址范围?

How to exclude a range of virtual addresses that can be returned by malloc() in C?

提问人:Κυριάκος Παρασκευάς 提问时间:5/24/2023 更新时间:5/24/2023 访问量:34

问:

成功后,malloc() 返回指向新分配的内存的指针。指针是一个虚拟地址。默认情况下,无法控制 malloc() 返回的虚拟地址。有没有办法排除一系列虚拟地址,以便 malloc() 不会将该范围的地址返回到指针?

指针 内存管理 malloc 内存 虚拟 地址空间

评论

0赞 Ruud Helderman 5/24/2023
听起来像是 XY 问题。你能解释一下你想用这个解决什么问题吗?
1赞 Κυριάκος Παρασκευάς 5/24/2023
我想创建一个与远程内存相对应的唯一虚拟地址空间范围,该范围是通过我的自定义远程内存分配器分配的。但是,即使我的自定义 mmap() 返回所需的虚拟地址范围,我也需要确保这些虚拟地址不会首先被常规 malloc() 使用。如果应用程序决定先分配本地内存,然后尝试分配远程内存,则可能会发生这种情况。这是否使用例更清晰一些?@RuudHelderman
0赞 Ruud Helderman 5/24/2023
什么是“远程内存”?两台计算机共享内存?一台计算机是否要向另一台计算机指定地址范围?为什么不让每台计算机根据自己在本地发现的任何自由地址来偏移共享地址呢?mmap
0赞 Κυριάκος Παρασκευάς 5/24/2023
远程内存被认为是 pcie 上的内存,可以通过 ioremap() 映射到应用程序虚拟地址空间。但是,这些细节与我最初的问题无关。
0赞 Ruud Helderman 5/24/2023
ioremap使你可以自由地使用任何碰巧可用的虚拟内存区域。因此,首先让我们分配一个尚未分配的内存区域(通过保留其第一个参数 NULL),然后调用(为其提供返回值)。 并且不要冲突,只要你让他们选择地址。mmapioremapmmapmallocmmap

答: 暂无答案