簡體   English   中英

在Array C ++中每個bool 1位

[英]1 bit per bool in Array C++

bool fp[81];

根據我的理解,fp應該使用ceil(81/8)字節,因為它是連續的。

我對么?

我該如何證明這一點?

不,緩沖區的大小是實現定義的。 請參閱以下標准中的引用。

因此,您可以期望的大小是81 * X,其中X是bool的大小,這是實現定義的。

$ 5.3.3 / 1 - “sizeof運算符產生其操作數的對象表示中的字節數。操作數是表達式,未計算,或帶括號的type-id。sizeof運算符不應用於具有函數或不完整類型的表達式,或者在聲明所有枚舉數之前的枚舉類型,或者此類型的帶括號的名稱,或指定位字段的左值。表達式sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1;應用於任何其他基本類型(3.9.1)的sizeof的結果是實現定義的。[ 注意:特別是,sizeof(bool)和sizeof(wchar_t)是實現定義的.69) ] [注意:對於字節的定義見1.7,對象表示的定義見3.9。

不,它的81*sizeof(bool)最有可能是81個字節

您可以找到任何具有sizeof的對象或類型使用的存儲:

int main() {
  bool fp[81];
  cout << sizeof fp << '\n';
  cout << sizeof(bool[81]) << '\n';
  return 0;
}

不,每個bool通常是單獨存儲的( 通常 ,取決於您的計算機,8位)。 占用的內存至少為81個字節。

你可以使用sizeof(fp)檢查它的大小,在我的情況下給出81

如果要確保每個位都被視為一個位而不是使用整個值的字節,請使用bitset:

#include <bitset>
using namespace std;
#define SIZE 1000;
int main()
{
bitset<SIZE> bit_set; // unfortunately the size of a bitset is determined at compile time
bit_set.flip();
bit_set[232] = true;
}

您必須了解這是處理器及其指令的非常低級別的內存限制,因為它們旨在支持位字而不是位。 盡管如此,為了這個目的添加一些指令本來是一件好事,因為bitset所做的只是位移...

我真的需要學習x86程序集。

不, bool是8位。 使用vector<bool> (一個專門的位打包向量)或bitset

暫無
暫無

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

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