以下C++動態地爲包含大量整數的對象的巨大數組分配內存。爲什麼操作系統不會拒絕此程序的內存?
#include <iostream>
// VALUE1 > 1000000
class Int{
int* p = new int[VALUE1];
};
int main() {
// VALUE2 > 1000000
Int* ppi = new Int[VALUE2];
while(true){
}
}
我的理解是內存分配在堆(這是很大的)。程序向內存請求操作系統,並處理內存分配。所以,我的問題是爲什麼操作系統沒有向程序拒絕內存(如果它沒有可用的內存資源,它會讓它崩潰)?這是操作系統的工作。上述程序使我的電腦凍結。如果有問題,我在Linux 4.9上有8 GB RAM。
我猜計算機凍結了,因爲它忙於'while(true){}'中什麼都不做。由於'p'和'ppi'從不使用,它們可能已被編譯器優化掉了。 – wkl
你確定編譯器不只是優化分配,因爲你什麼也不做呢? – EdChum
或者也許它變成了一個虛擬內存請求,它將不會提交頁面直到它們被訪問。 –