[英]What is the size of bitset in C++
我想知道位集實際上是如何分配內存的。 我從某個博客中得知,它占用了內存一點點。 但是,當我運行以下代碼時:
bitset<3> bits = 001;
cout<<sizeof(bits);
我得到的輸出為4。其背后的解釋是什么?
還有沒有一種方法可以在C ++中按位分配空間?
您可以將sizeof(bitset<N>)
近似為:
4 * ((N + 31) / 32)
8 * ((N + 63) / 64)
似乎第一個是對的: 4 * ((3 + 31) / 32)
是4
您的CPU不是用單個位來操作,而是用字節和字來操作。 在您的情況下,sizeof(bits)的結果為4,因為編譯器決定將此數據結構對齊為4個字節。
我得到的輸出為4。其背后的解釋是什么?
有一個在標准中沒有有關如何bitset
應該可以實現。 它是實現定義的,請查看編譯器的bitset header
。
還有沒有一種方法可以在C ++中按位分配空間?
不,在C ++中沒有方法可以按位分配空間。
通常,在32位處理器上,編譯器將使分配的內存大小為4字節的倍數,因此,大於3/8的最接近4的倍數為4字節。
您不能尋址單獨的位,最低可尋址單位是字節。 因此,不能,您不能精確分配位。
另一件事是填充-您幾乎總是獲得所需的更多字節分配,這是出於優化目的。 尋址不在32b邊界上的字節通常很昂貴,在x64 CPU上尋址不在64b邊界上的字節會導致異常。 (談到英特爾平台。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.