簡體   English   中英

C ++中位集的大小是多少

[英]What is the size of bitset in C++

我想知道位集實際上是如何分配內存的。 我從某個博客中得知,它占用了內存一點點。 但是,當我運行以下代碼時:

   bitset<3> bits = 001;
   cout<<sizeof(bits);

我得到的輸出為4。其背后的解釋是什么?

還有沒有一種方法可以在C ++中按位分配空間?

您可以將sizeof(bitset<N>)近似為:

  1. 如果內部表示形式是32位(例如在32位系統上為無符號),則為4 * ((N + 31) / 32)
  2. 如果內部表示形式是64位(如64位系統上的unsigned long),則表示為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.

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