2013-08-05 28 views
-2

我正在模擬器(計算機體系結構)上工作。 一段代碼讀取C++ std使用常量值列表初始化,它會改變性能嗎?

List freeList; 
const int numEntries 
registers = new MSHR[numEntries]; 
for (int i = 0; i < numEntries; ++i) { 
    registers[i].queue = this; 
    freeList.push_back(&registers[i]); 
} 

我改成了

List freeList; 
int numEntries; 
registers = new MSHR[numEntries + 100]; 
for (int i = 0; i < numEntries + 100; ++i) { 
    registers[i].queue = this; 
    freeList.push_back(&registers[i]); 
} 

只是改變了常量numEntries已經對內存的使用有重大影響。如果我長時間運行程序(代碼做了很多push_back,列表上的pop_front),我碰到這個錯誤

終止在調用'std :: bad_alloc' 後調用what():std: :bad_alloc

有什麼區別?

+1

寫入的代碼不會編譯,因爲int intEntries後面缺少分號。 –

+0

我沒有看到兩者之間的語義差異,除了第二個分配更多的條目。並且沒有'std :: List' - 它是'std :: list'。你真的使用標準容器嗎? – Mat

+0

是的,我使用std :: List,它只是我複製的代碼的一部分。 numEntries在別處被初始化。我想知道按const大小分配內存是否有所作用? – user2206344

回答

2

LMGTFY:documentation表示「分配內存失敗時引發異常」。

您正在嘗試創建比您擁有的內存更多的對象。

由於numEntries未初始化,因此是問題所在。

+0

這只是代碼的一部分。 – user2206344

+0

這段代碼運行時它的價值是什麼? – andy256

+0

+1,因爲它處理代碼中出現的明顯錯誤。 – juanchopanza