数组可以存在于物理内存中的多个位置吗?

Can an array exist in multiple locations in physical memory?

假设我有一个数组,其中存储了一些敏感数据。覆盖数组的每个元素可确保从物理内存中的 当前 位置擦除数据。

但是,物理内存中的其他地方是否可能存在数据的任何陈旧副本?还是虚拟内存到物理内存的映射在数组的生命周期内是固定的?

我特别想知道 C、Java 和 WebAssembly 中的行为。

在所有语言中 - 数组是从其他内存位置填充的,因此您需要确保其他内存位置也被覆盖。

在 Java 和 WebAssembly 等垃圾收集语言中,可以想象垃圾收集器的实现会移动对象(例如数组),可能不会覆盖以前的内存位置。

您还应该注意,如果数据来自进程外部(例如网络),并且在到达进程之前被解密(或者根本没有加密),那么它也可能存在于 OS缓冲区。

在大多数情况下,更好的做法是不允许您的进程在处理敏感信息时与不受信任的一方共享内存,而不是追查可能的敏感数据泄漏。