当我使用new []关键字(或new运算符)时,它是否连续分配内存?新[]是否连续分配内存?
int* arr = new int[10];
我的意思是,是否有任何保证,即ARR [0]和ARR [1]紧密放置,我可以通过使用指针增量ARR迭代?如果是这样,这种行为保存与结构和类而不是int?
当我使用new []关键字(或new运算符)时,它是否连续分配内存?新[]是否连续分配内存?
int* arr = new int[10];
我的意思是,是否有任何保证,即ARR [0]和ARR [1]紧密放置,我可以通过使用指针增量ARR迭代?如果是这样,这种行为保存与结构和类而不是int?
是的元素被保证位于连续记忆(独立于他们的类型)。当你调用new[]
时,你会得到一个数组,实际上访问元素的唯一方法是通过指针算术。
考虑一下arr[i]
实际上意味着:
arr[i]
真是
*((arr) + (i))
的这种古怪的sideeffect只是一个缩写形式,是一个数组arr
和索引i
i[arr]
与完全相同(尽管如果你想混淆你的同事,你只会写这个)。
但是请注意,[]
可能会被重载,在这种情况下,它可以执行任何实现选择。尽管如此,分配有new[]
的数组也具有超载的oeprator[]
将在连续的存储器中具有其元素。
物理内存可以从分散的页面分配,但分配的内存的虚拟地址空间将是连续的。 – rcgldr
@ DOUGLASO.MOEN:对我来说这些天来说是一件愚蠢的事情,但我无法抗拒:自从C++ 03以来,'std :: vector'连续性才得到保证。 – Bathsheba