2010-04-10 151 views

回答

0

不一定,通常也不是。可能有不同的分配機制。

許多人將在分配的塊之間存儲元數據,根據對象大小拆分堆以及其他內容。你不能依賴於返回的指針的連續性。

4

是的,分配實際上是連續的(如果你用一個malloc()調用得到它)。它可能不是物理上連續的,但從應用的角度來看,你通常不關心。

2

這取決於你究竟在問什麼。例如,假設您有這個C代碼:

char* a = malloc(100); 
char* b = malloc(100); 

a和b指針每個都有100個字節分配給它們。但是,您不能假定分配給b的100個字節恰好在分配給100個字節之後,反之亦然,事實上,它們的位置相對於彼此是正確的。所以從這個意義上說,不,它們不是連續的。

但是,在每個100字節的塊內,從程序的角度來看,這100個字節是連續的。也就是,a[1]a[0]a[2]相距一個字節。

2

您應該將虛擬內存的概念與物理內存中的一個分開。

儘管每個分配的塊(單個對象或一個對象數組)都有一個連續的虛擬空間(從您的動態內存分配器提供給您的地址開始),但它可以根據實際內存分配底層操作系統管理內存。

當然,如果虛擬內存不存在,它們將對應,否則對於正在使用它的程序是連續的,但不在存儲器的物理佈局中。