首頁 > 後端開發 > C++ > 放置新數組分配到底有多少開銷?

放置新數組分配到底有多少開銷?

Mary-Kate Olsen
發布: 2024-12-22 08:40:14
原創
252 人瀏覽過

How Much Overhead Does Placement-New Array Allocation Really Have?

放置新和未指定的陣列分配開銷

C 11 標準指定放置新表達式new(buffer) T[5] 將導致呼叫到運算符new [](sizeof(T)*5 y,buffer) 其中x 和y 是表示陣列分配的非負、未指定值開銷。

但是,在使用具有預先分配緩衝區的placement-new 時,這會造成問題。如果 y 大於 0,則分配的緩衝區可能不足以容納陣列。

確定數組分配開銷

由於標準不保證 y 的值,因此至關重要在運行時確定它。一種方法是建立一個自訂的 Placement-new 運算子來檢查可用的緩衝區空間。

inline void* operator new[](std::size_t n, void* p, std::size_t limit)
{
    if (n <= limit)
        std::cout << "life is good\n";
    else
        throw std::bad_alloc();
    return p;
}
登入後複製

透過改變陣列大小並檢查自訂new 運算子中的n,您可以推斷出y 的值

更新了標準

需要注意的是,缺陷報告已於2019 年11 月修復了此問題,可追溯至C 的所有版本。根據更新後的標準,operator new[](std::size_t, void* p) 的開銷總是零。

因此,在使用函式庫函數operator new[](std::size_t, void*),您可以預先分配確切大小的緩衝區,而不​​必擔心未指定的分配開銷。

以上是放置新數組分配到底有多少開銷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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