首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在c++中创建一个占用不到一个字节内存的类型?

是否有可能在c++中创建一个占用不到一个字节内存的类型?
EN

Stack Overflow用户
提问于 2015-04-16 19:41:05
回答 5查看 5.1K关注 0票数 8

在我的计算中,我只需要使用7位空间,所以我使用了char类型。但是,我想知道是否可以声明使用少于一个字节内存的我自己的类型?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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位宽。

票数 14
EN

Stack Overflow用户

发布于 2015-04-16 19:48:24

即使您试图创建一个大小为1的位集,它也会消耗一个字节。因此,不可能在C++中创建小于字节的类型。

代码语言:javascript
复制
#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;
}
票数 6
EN

Stack Overflow用户

发布于 2015-04-16 19:45:33

字节是最小可寻址单元,在C++中最小大小等于1,内存以字节为单位分配。甚至一个空类的大小也至少不小于1字节。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29684487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档