std::vector 元素在物理内存中是否连续?

2023-11-24

我的问题类似于this,但是我问的问题有点不同。

很明显,可以使用第一个地址std::vector元素作为C类型数组。这意味着在虚拟内存中,std::vector元素是连续的。但是,如果物理内存存在碎片,则有可能std::vector实际上在物理内存中被分割成很多部分。

我的问题是:是std::vector物理内存(以及虚拟内存)中连续的元素?


用于在向量中存储数据的内存必须位于连续的地址,因为这些地址对代码可见。

在大多数现代 CPU/操作系统的典型情况下,这意味着虚拟地址必须是连续的。如果这些虚拟地址跨越页面边界,那么物理地址很可能将不再连续。

我应该补充一点,这很少是一个主要问题。在许多情况下,现代系统至少在硬件级别上对这种碎片内存使用提供一些支持。例如,许多网络和磁盘控制器都包含“分散/收集”功能,其中操作系统使用页表将缓冲区的虚拟地址转换为物理地址,然后将许多物理地址直接提供给控制器,然后控制器收集如果从内存传输到外设,则将数据从这些地址传输出去;如果从外设传输到内存,则将数据“分散”到这些地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::vector 元素在物理内存中是否连续? 的相关文章

随机推荐