ST3*_*ST3 7 c++ memory memory-management vector
我的问题与此类似,但我问的是有点不同.
很明显,可以将第一个std::vector元素的地址用作C类型数组.这意味着在虚拟内存中,std::vector元素是连续的.但是,如果物理内存碎片化,则可能std::vector实际上将其拆分为物理内存中的许多部分.
我的问题是:std::vector元素在物理内存(以及虚拟内存)中是否连续?
Jer*_*fin 14
用于在向量中存储数据的存储器必须位于连续的地址,因为这些地址对于代码是可见的.
在大多数现代CPU /操作系统的典型情况下,这意味着虚拟地址必须是连续的.如果这些虚拟地址跨越页面边界,那么物理地址很可能不再是连续的.
我应该补充一点,这很少是一个主要问题.在许多情况下,现代系统至少对这种分散的内存使用有一定的支持,直到硬件级别.例如,许多网络和磁盘控制器都包含"分散/聚集"功能,其中操作系统使用页表将缓冲区的虚拟地址转换为物理地址,然后直接向控制器提供多个物理地址,然后控制器收集来自这些地址的数据,如果它从内存传输到外设,或者如果数据从外设转移到内存,则将数据"分散"到这些地址.
不,无法保证在C++的抽象机器中为您提供连续的物理内存.下面的抽象和硬件malloc可以免费使用不连续的内存.
只有您的目标实施可以做出这样的保证,但语言/模型并不关心.它依靠系统来完成它的工作.
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |