我想知道有多少最大內存可以分配給malloc()的進程。sbrk,malloc - 可以分配的最大內存
所以要點是:
start = sbrk(0);
malloc(1); /* so space is given to the data segment */
end = sbrk(0); /* start != end at this point */
/* Try to allocate in chunks as much as possible. */
while (end == sbrk(0)) {
malloc(1048576);
if (end == sbrk(0)){
maxMemory = maxMemory + 1048576;
}
}
return maxMemory;
所以,我不明白的事情是:
如果你這樣做:
start = sbrk(0);
malloc(1);
end = sbrk(0);
OK,結束=啓動
但是:
start = sbrk(0);
malloc(1048576);
end = sbrk(0);
開始==端
因此,基本上,該程序中斷(SBRK(0))不與較大的值移動。所以給定的時間會持續很長一段時間,直到sbrk(0)移動並且我得到一個非常大的〜68gb的最大值。
我認爲任何malloc最初都會移動數據段,但事實並非如此。有人可以解釋爲什麼它沒有(它分配它在哪裏?)和/或我做錯了什麼?
sbrk()函數僅用於malloc系列函數中。所以不應該直接在用戶函數中調用。 – user3629249 2014-11-02 22:21:04
這行:malloc(1);導致.heap段的幾個字節,而不是.data段。它還會導致內存泄漏,因爲返回的分配內存指針丟失。 – user3629249 2014-11-02 22:22:33
希望結束被定義爲void *希望maxmemory被定義爲(32位系統)int maxmemory = 0或(64位系統)long long int maxmemory = 0; – user3629249 2014-11-02 22:38:09