我需要在我的代碼中存盤大約 30 個整數的預先已知大小,我已經去了
constexpr std::array<size_t, 30> MAPPING{1, 2, 3, ...};
如果我沒有錯,上面的內容將在編譯時進行評估,但它也會占用一個大小為 30 個整數的連續記憶體塊?
如果是這樣,是否值得使用 std::deque 代替
const std::deque<int> MAPPING{1, 2, 3, ...};
這樣,對于雙端佇列,我們??不會使用單個大的順序記憶體塊,它可能會使用一堆碎片塊來代替,因此即使記憶體碎片化它也能正常作業?
如果我錯過了什么,請告訴我,謝謝
uj5u.com熱心網友回復:
不值得std::deque在這里使用。
它還會占用一個大小為 30 個整數的連續記憶體塊嗎?
是的,它將占用堆疊中大小為 30 個整數的單個連續記憶體塊
這樣,對于雙端佇列,我們??不會使用單個大的順序記憶體塊,它可能會使用一堆碎片塊來代替,因此即使記憶體碎片化它也能正常作業?
它依賴于實作,對于 30 個整數,它們可能被分成幾個小塊,也可能不會,但它會使用堆記憶體,因此有運行時開銷:
與 std::vector 不同,deque 的元素不是連續存盤的:典型的實作使用一系列單獨分配的固定大小的陣列,并帶有額外的簿記,這意味著與 vector 相比,對 deque 的索引訪問必須執行兩個指標取消參考僅執行一項的索引訪問。
根據@Homer512的評論,我們在使用堆的時候也需要注意記憶體碎片,可能會有記憶體浪費,無法避免。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364337.html
