正如标题所说,我想知道在c++中,一个new操作分配的内存是否是连续的......
BYTE* data = new BYTE[size];
在此代码中,无论给定大小,返回的内存区域都是连续的。如果堆管理器无法分配连续的内存size
,失败了。异常(或 NULLmalloc
)将被退回。
程序员总是会在进程的地址空间中看到连续(是的,无限:-)内存的错觉。这就是虚拟内存为程序员提供的功能。
请注意,程序员(除了一些嵌入式系统之外)总是会看到虚拟内存。然而,实际上连续的内存可以以任意方式映射(以“页面”大小的粒度,通常为 4KB)到物理内存中。您看不到该映射,并且大多数情况下您不需要理解它(非常具体的页面级优化除外)。
那这个呢?
BYTE* data1 = new BYTE[size1];
BYTE* data2 = new BYTE[size2];
当然,你不能说出相对地址data1
and data2
。它通常是不确定的。这取决于堆管理器(例如malloc
, often new
刚刚包裹好malloc
) 发出请求时的策略和当前堆状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)