在我的计算中,我只需要使用7位空间,所以我使用了char类型。但是,我想知道是否可以声明使用少于一个字节内存的我自己的类型?
发布于 2015-04-16 19:50:26
不怎么有意思。在结构中,您可以使用位字段。因此,如果您知道您需要一定的、固定数量的条目,这将是一种节省几位的方法(但请注意,结构总是会被填充到至少下一个完整的字节数量中)。还要注意的是,由于“普通”CPU不能寻址小于八进制/字节的数量,对这些位字段值的访问可能更慢,因为编译器需要生成额外的指令才能“在中间”获取/存储值。因此,为了节省一些比特,您必须花费一些CPU时间。
C++11标准在第1.7章中提到了C++内存模型(强调我的):
C++内存模型中的基本存储单元是字节。字节至少大到足以包含基本执行字符集(2.3)和Unicode UTF-8编码形式的8位代码单元的任何成员,并且由一个连续的位序列组成,其数目是实现定义的。
换句话说: C++中最小的可寻址单元至少有8位宽。
备注:如果您想知道:有些机器,如DSPs,一次只能寻址大于8位的单位。;对于这样的机器,编译器可能定义“字节”为,例如,16位宽。
发布于 2015-04-16 19:48:24
即使您试图创建一个大小为1的位集,它也会消耗一个字节。因此,不可能在C++中创建小于字节的类型。
#include <iostream> // std::cout
#include <string> // std::string
#include <bitset> // std::bitset
int main ()
{
std::bitset<1> foo;
std::bitset<1> bar (1);
std::bitset<1> baz (std::string("1"));
std::cout << "foo: " << sizeof(foo) << '\n';
std::cout << "bar: " << sizeof bar << '\n';
std::cout << "baz: " << sizeof baz << '\n';
return 0;
}发布于 2015-04-16 19:45:33
字节是最小可寻址单元,在C++中最小大小等于1,内存以字节为单位分配。甚至一个空类的大小也至少不小于1字节。
https://stackoverflow.com/questions/29684487
复制相似问题