在Rust上,是否可以分配一片内存,使返回的指针适合u32


HVM是一个函数运行时,它将指针表示为32位值。它的分配器预先保留了一个巨大的(4GB(缓冲区,用于创建内部对象。这并不理想。相反,我想使用系统分配器,但这是不可能的,因为它返回64位指针,这可能比存储它们的可用空间大。Rust中是否有任何跨平台的方法来分配缓冲区,从而保证指向缓冲区的指针适合u32?换句话说,我正在寻找类似于的东西
let ptr = Box::new_with_small_ptr(size);
assert!(ptr as u64 + size < u32::MAX);

没有,因为这是一种非常小众的需求,需要大量的关注。

这并不像";只是返回一个低指针"-您需要从操作系统中实际分配该空间。你的切入点是mmap。准备好用MAP_FIXED和读取/proc/self/maps做一些底层工作,并在从mmap获得的内存区域上实现一个分配器。

如果您担心的只是内存使用过度,请注意Linux默认情况下会过度使用内存——除非您真正尝试全部使用,否则分配4GB内存不会保留物理内存。

最新更新