ElC*_*ado 6 c++ byte types primitive-types
对于我的计算,我只需要使用7位空间,所以我使用的是char类型.但是我想知道是否可以声明我自己的类型使用少于一个字节的内存?
Dar*_*ust 12
并不是的.在结构内部,您可以使用位字段.因此,如果您知道您需要一定数量的固定条目,这将是一种节省一些比特的方法(但请注意,结构将始终填充到至少下一个整数字节).另请注意,由于"普通"CPU无法处理小于八位位组/字节的数据,因此对这些位字段值的访问可能会更慢,因为编译器必须生成额外的指令来获取/存储值"在中间".因此,为了节省一些比特,你必须花费一些CPU时间.
在C++ 11标准说,在章节1.7的C++内存模型(重点煤矿):
C++内存模型中的基本存储单元是字节.一个字节至少足以包含基本执行字符集(2.3)的任何成员和Unicode UTF-8编码形式的八位代码单元,并由连续的位序列组成,其数量为实施 - 定义.
换句话说:C++中最小的可寻址单元至少为8位宽.
旁注:如果您想知道:有些机器像DSP一样只能处理大于8位的单元 ; 对于这样的机器,编译器可以将"字节"定义为例如16位宽.
即使您尝试创建大小为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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |