當我使用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