bool fp[81];
根据我的理解,fp应该使用ceil(81/8)字节,因为它是连续的。
我说错了吗?
我如何证明这一点?
答案 0 :(得分:10)
不,缓冲区的大小是实现定义的。请参阅以下标准中的引用。
因此,你可以期望的大小是81 * X,其中X是bool的大小,这是实现定义的。
$ 5.3.3 / 1 - “sizeof运算符产生其操作数的对象表示中的字节数。操作数是表达式,未计算,或带括号的type-id。sizeof运算符不得应用于具有函数或不完整类型的表达式,或者在声明其所有枚举数之前应用于枚举类型,或应用于此类型的带括号的名称,或应用于指定的左值 一个比特字段。 sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1;该 sizeof应用于任何其他基本类型(3.9.1)的结果是实现定义的。 [注意:特别是,sizeof(bool)和sizeof(wchar_t)是实现定义的.69)] [注意:对于字节的定义,请参见1.7,对于对象表示的定义,请参见3.9。 ]
答案 1 :(得分:4)
不,它的81*sizeof(bool)
很可能是81字节
答案 2 :(得分:3)
您可以找到任何具有sizeof的对象或类型使用的存储空间:
int main() {
bool fp[81];
cout << sizeof fp << '\n';
cout << sizeof(bool[81]) << '\n';
return 0;
}
答案 3 :(得分:2)
不,每个bool通常是单独存储的(通常,具体取决于您的计算机,8位)。占用的内存至少为81个字节。
答案 4 :(得分:2)
您可以使用sizeof(fp)
检查其大小,在我的情况下会给出81
答案 5 :(得分:1)
如果您想确保每个位都被视为一个位而不是使用整个值的字节,请使用位集:
#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程序集。
答案 6 :(得分:-1)
不,bool
是8位。使用vector<bool>
(专门的位打包向量)或bitset
。