簡體   English   中英

std::位集<n>實現導致大小被竊聽</n>

[英]std::bitset<N> implementation causes size overheard

看起來std::bitset<N>現在是一個unsigned longs數組,這意味着當 N 很小時會有(沉重的?)開銷。 sizeof(std::bitset<8>)8 bytes

底層數組本身的類型不是template參數是否有原因? 為什么實現在更合適的時候不使用uint32_t/16_t/8_t 我在實施中沒有看到任何限制這一點的東西嗎?

我猜我錯過了一個特定的原因,但不確定如何尋找它或者根本沒有原因? 由於這是一個如此簡單的container ,我無法理解這里似乎如何避免C++的零開銷原則。

GCC 實施: https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a00775_source.html

我相信 clang 是相似的(使用 sizeof 來確認)

我無法理解這里似乎如何避免 C++ 的零開銷原則。

零開銷原則是一個原則,不是C++的絕對規則。

許多人在編譯時固定容量有用的情況下使用std::vector 這樣的類型可以只有兩個指針而不是三個,因此可以小 50%。 許多人使用std::string的上下文中,不可變字符串即使不是更好也同樣有效; 它會減少字符串的大小(忽略 SSO),以及它的復雜性。 等等。

這些都代表了相對於標准類型的低效率。 沒有標准庫類型可以處理所有可能的使用場景。 這些類型的目標是廣泛有用,而不是完美。

沒有什么可以阻止某人使用具有用戶提供的基礎類型的完全相同的接口編寫位集樣式類型。 但是標准沒有這種類型。

事實上,沒有什么可以阻止bitset實現根據給定的位數選擇底層類型。 您的實現不會那樣做,但它可以做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM