在Rust中,Vec<f64>
是否可以使用共享内存?
程序中的进程在Vec<f64>
中交换两个或多个值,我需要在进程之间共享内存。
答案 0 :(得分:1)
无法安全创建由共享内存支持的Vec
。这有两个原因:
Vec
拥有其内存,并且在增长时会重新分配它,而在删除时会释放它。当Vec
重新分配或超出范围时,不安全地创建指向mmap
内存的Vec
会破坏堆。
Vec
拥有对其内存的独占访问权,例如&mut
引用。编译器可以自由地忽略和重新排列读取和写入的顺序,前提是没有其他东西在使用内存。如果这个假设被打破,则行为是不确定的。为了放松这个假设,您的数据类型必须基于UnsafeCell
。
Vec
是此作业的错误指针。尝试使用&[UnsafeCell<f64>]
或&[AtomicU64]
(使用from_bits
和to_bits
进行转换),因为标准库中没有AtomicF64
。