我最近了解到,如果您执行Box::leak(Box::new(value))
并接收,&'static
则在线程之间传输值会变得容易得多。我有一个特定的值必须可以从不同的线程访问,但问题是我必须泄露用户登录凭据,据我所知,如果我这样做,这些凭据将不会在应用程序退出时从内存中清除。这让我怀疑我是否不应该使用这种方法,或者现代操作系统是否有办法阻止恶意应用程序收集这些数据?
我最近了解到,如果您执行Box::leak(Box::new(value))
并接收,&'static
则在线程之间传输值会变得容易得多。我有一个特定的值必须可以从不同的线程访问,但问题是我必须泄露用户登录凭据,据我所知,如果我这样做,这些凭据将不会在应用程序退出时从内存中清除。这让我怀疑我是否不应该使用这种方法,或者现代操作系统是否有办法阻止恶意应用程序收集这些数据?
当进程终止时,操作系统将释放该进程分配的所有内存。这包括所有泄漏的内存。
即使情况并非如此,您所描述的也不是内存安全问题。“内存安全”的含义非常具体,它本身并不包括阻止访问密码等敏感信息。内存安全意味着以下事情是不可能的:
我能想到的关于内存安全的最简洁的描述是“对值的引用总是指向有效值”(尽管这可能有点过于简单化)。
首先要解决内存泄漏的原因:如果您要做的只是在多个线程之间共享某些内容,请考虑使用
Arc
。这实现了线程安全的引用计数智能指针,它将在最后一个句柄被删除时释放所持有的分配。除非您正在做一些非常奇怪的事情,或者原子操作的开销会导致性能问题,否则您几乎总是可以使用Arc
而不是泄漏。附注:如果您担心密码在磁盘上或程序终止后仍然存在,则需要一个“安全字符串”。安全字符串的实现通常会做两件非常重要的事情: