C++中new分配的内存是否处于物理RAM,还是仅为虚拟内存?
C++内存分配的物理与虚拟内存疑问
new[]会为我们分配连续的内存。
根据C++23草案N4928第6.7.5.5.2(2)节“分配函数”的描述(笔者强调部分):
分配函数尝试分配请求的存储量。如果成功,它将返回一块存储区域的起始地址,该存储区域的字节长度至少与请求的大小相同。
核心问题
C++规范是否明确规定,分配完成后该内存块实际位于物理RAM中,还是仅存在于虚拟内存中(可能完全或部分被换页到磁盘)?
解答
C标准完全不涉及物理内存与虚拟内存的区分,这类细节属于操作系统层面的内存管理范畴,不在C语法规范的约束范围内。
C++标准只要求通过new[]等分配方式获得的是符合要求的连续存储区域,程序可合法访问该区域内的字节,但不会对内存的物理存储位置做任何规定。在支持虚拟内存的系统中,分配的内存通常只是虚拟地址空间中的一段区域:只有当程序实际访问这些内存时,操作系统才会将对应的物理页加载到RAM中;未被访问的部分可能一直留在磁盘的交换空间里,具体行为完全由操作系统的内存管理机制决定。
内容的提问来源于stack exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

