就像在標題中一樣,連續的內存塊是什麼?什麼是連續內存塊?
回答
一個在它佔據的地址中沒有任何空白。你大概可以把它看成是一個「塊」,把中間的空隙看作是「兩塊」。
該術語在數組的定義中出現爲「連續」。這意味着元素是端對端佈局的,沒有不連續性,它們之間沒有填充(每個元素內部可能有填充,但元素之間沒有填充)。所以5 4字節元件的陣列看起來像這樣(每字節1個下劃線字符,則|符號不表示存儲器):
____ ____ ____ ____ ____
|____|____|____|____|____|
它不會看起來像這樣:
____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|
而且它也不是這樣的:
____ ____ ____ ____ ____
|____|____|____| ... somewhere completely different ... |____|____|
在所有情況下,「看起來像」的意思是「就在C可見的地址被關注」。虛擬地址空間中可能有連續的東西,但在物理RAM中不連續。對於這個問題,物理內存地址空間可能是連續的,但在物理內存中並不實際相鄰。其中一半可能在這裏的一個RAM芯片上,另一半在另一個RAM芯片上。但是C內存模型不能「看到」任何這種模型。
未被其他內存中斷的內存塊。或者更確切地說,它需要一個不間斷的虛擬地址空間塊。支持該地址空間的真實RAM不需要連續。
如果您分配一個較大的內存塊,這一點很重要。操作系統必須把它作爲一個連續的塊來提供給你,但是如果內存如此碎片化以致只有較小的塊被釋放,那麼即使總可用內存大於所請求的空間,也不能滿足這種內存分配。
這對64位應用程序來說並不是什麼大問題,因爲地址空間很大。但是在32位進程中,可能會發生這樣的情況,即堆得到如此分散(釋放的塊之間仍存在未實現的塊),導致較大的分配失敗。
回答分配內存的情況,當調用內存分配器並請求24個字節的內存時,它必須能夠找到至少24字節未分配內存的單個塊。
如果其具有16個字節的存儲器中,起始一個地址x
和起始於一個地址的另一個8個字節y
使得y > x + 16
或y < x - 8
(這將產生間隙),則分配器不能滿足您的24個字節的請求,即使總共有24個字節可用。請參閱Fragmentation。
當內存塊由來自單個線性地址空間的開始和結束地址定義且沒有空洞時,該內存塊是連續的。
這是5個字節的連續存儲器塊,從位置1跨越到位置5:是一起在存儲器沒有間隙
它代表字節(淺藍色)字節(白色) 它們之間。
這是一種非連續組的五個字節的興趣:
它被分段成三個組字節(黃色)的,開始於與間隙位置1字節組之間存在。間隙字節在位置4和6.
+1爲彩色插圖:) – Michael 2011-08-18 21:50:54
- 1. 與malloc連續內存塊
- 2. C++中連續內存的含義是什麼?
- 3. 連續的'新'操作符是否連續分配內存?
- 4. 容器將多個內存塊呈現爲單個連續的內存塊
- 5. 新[]是否連續分配內存?
- 6. 將數組切片爲連續塊的pythonic方法是什麼?
- 7. 兩個連續的代碼塊{} {}是做什麼的?
- 8. 如果沒有連續的內存空間,realloc會做什麼?
- 9. 連續內存的InputIterator?
- 10. 2d std :: vector連續內存?
- 11. 不連續謂詞是什麼意思?
- 12. Android內存分配器 - 內存是否需要連續?
- 13. 什麼是內連接?
- 14. 在c中如何分配內存,以及爲什麼兩個連續內存之間的差異總是4?
- 15. 搜索2個連續字符的內存塊
- 16. 連續內存塊的動態分配(malloc)
- 17. 使用單個連續內存塊索引3維陣列
- 18. 在連續的內存塊中分配objective-c對象
- 19. 什麼是內存互鎖?
- 20. 什麼是內存佔用?
- 21. 什麼是虛擬內存?
- 22. 非連續滑塊
- 23. 連續JS滑塊
- 24. 製作一個內存視圖C連續的Fortran連續
- 25. Java:一維數組是否總是在內存中連續?
- 26. 什麼是內存?*。內存屬性控制 - 內存或磁盤?
- 27. 安置新的連續內存
- 28. 連續內存傳遞參數
- 29. 程序拒絕連續消耗內存
- 30. 指點指點連續內存
+1好的數字。 – 2010-10-30 15:42:37
@Sinan:謝謝,我解決了。 – 2010-10-30 16:00:24
對於那個反應,經典。 – 2010-10-30 17:27:21