C++陣列的連續性

光風霽月發表於2024-04-25
  1. 虛擬上連續,物理上大機率連續,除非不在同一個物理頁上,並且物理頁不連續時
  2. 陣列在實體地址空間是否連續,對於使用者空間的程式是不需要關心的。另外,對於一個抽象層次很高的程式語言,陣列是不是一定要保證虛擬地址空間連續,感覺也是可以研究的。例如,java的陣列就不連續?
  3. 所以array到底是在虛擬還是實體地址上連續,還是要看你訪問的是虛擬還是實體記憶體。如果array跨page boundary,是有可能在實體記憶體上不連續。不過對於使用者態程式來說這個區別幾乎不可見,唯一可能的區別在於可能會產生的TLB miss造成的幾十個cycle損失。

ALL IN ALL
jyyyx:總而言之,由於陣列可能不止佔一個page,因此當陣列是多page時,由於相鄰page對應的物理塊不一定相鄰,因此此時很有可能物理塊是不連續的,也就是物理空間上不連續

相關文章