陣列放置新:了解未指定開銷的影響
C 標準要求陣列放置新表達式可能會產生未指定的開銷分配的緩衝區。由變數 x 和 y 表示的開銷在 new 的不同呼叫之間可能會有所不同。
考慮範例程式碼:
void* buffer = malloc(sizeof(std::string) * 10); std::string* p = ::new (buffer) std::string[10];
根據標準,placement-new 表達式new ( buffer) std::string[10] 將在內部呼叫operator new[](sizeof(std ::string) * 10 y,
但是,這造成了一個問題:如果y 大於0,則預先分配的緩衝區 buffer 可能太小,導致運行時錯誤。 0。實現無關的方法
為了避免依賴特定於實現的知識,您可以使用自己的放置數組新實現,用於檢查運行時的開銷:
透過改變數組大小並檢查範例中的n如上所述,您可以推斷出特定平台的y 值。修正了此問題,確保運算子new[](std::size_t, void* p) 的y 始終為0。
以上是C 放置新數組確實需要多少緩衝區空間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!