將動態記憶體配置呼叫縮至最小

您可以減少動態配置記憶體的次數,以增進效能。 每次呼叫 new 運算子時,都會從資料堆配置特定空間量。 此空間一律對齊 16 個位元組,這適用於任何物件類型的儲存體。 此外,還會從動態資料堆中取得 32 個額外位元組,以進行簿記。 這表示即使您只需要一個位元組,也會從動態資料堆配置 48 個位元組, 32 個位元組用於簿記, 15 個位元組用於填補。 當資料堆中的現行空間配置用完時,儲存體配置會較慢:
ptr1 = new char[12];
ptr2 = new char[4];
在上述程式碼中,會從資料堆中取得 96 個位元組 (包括 64 個位元組用於簿記, 16 個位元組用於填補) ,並使用新的兩次。 此程式碼可以重新撰寫為:
ptr1 = new char[16];
ptr2 = ptr1 + 12;

只會從資料堆中取得 48 個位元組,且 new 運算子只會使用一次。 因為您減少動態空間配置需求,所以會從資料堆中取得較少儲存體。 您可能會獲得其他好處,例如減少尋頁錯失。 因為對 new 運算子的呼叫較少,所以也會減少函數呼叫額外負擔。

附註: 如果您透過增加指標來配置空間,則在配置指標 (或可包含指標的聚集) 時必須保證適當對齊,因為指標需要 16–byte 對齊。 如果未在資料類型的自然界限上配置資料類型 (例如 float ) ,則會降低這些資料類型的效能,因為這些資料類型具有單字或雙字組的自然對齊方式。