首頁 > 後端開發 > C++ > C 放置新數組確實需要多少緩衝區空間?

C 放置新數組確實需要多少緩衝區空間?

DDD
發布: 2024-12-29 06:37:09
原創
520 人瀏覽過

How Much Buffer Space is Really Needed for C   Placement-New Arrays?

陣列放置新:了解未指定開銷的影響

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板