加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 有没有办法改变变量在内存中的存储方式(位大小)?

发布时间:2020-12-16 10:19:39 所属栏目:百科 来源:网络整理
导读:假设我有以下数据结构(伪代码): struct{ uint8 id; bool failure; uint8 value;} 现在让我们说我希望以下列方式在内存中存储数据: 第7-6位:id 第5位:失败 第4-0位:价值 无论如何在C/C++ / Visual Studio中这样做?我知道你可以在Ada做到这一点,但这并不
假设我有以下数据结构(伪代码):

struct
{
  uint8  id;
  bool   failure;
  uint8  value;
}

现在让我们说我希望以下列方式在内存中存储数据:

第7-6位:id
第5位:失败
第4-0位:价值

无论如何在C/C++ / Visual Studio中这样做?我知道你可以在Ada做到这一点,但这并不意味着什么.

编辑:抱歉不清楚,我确实需要内存中的特定布局.此结构将用于通过串行通道发送的消息,并且需要符合接口规范

解决方法

您可以使用C位域:

struct
{
  uint8 id : 2;
  bool failure : 1;
  uint8 value : 5;
};

但是,尽管这可能会减少用于struct *的内存量,但这并不能保证任何特定的内存布局;为每个字段分配的特定位将取决于您的编译器和/或平台ABI.如果需要将特定位索引分配给特定字段,则需要手动打包和解压缩.或者,如果您的代码不需要是可移植的,您可以查看编译器如何打包位域,并相应地对结构的成员进行排序.

* – C标准对位域布局的限制很少,C甚至更少.通常它会导致较少的内存使用,但如果编译器决定它将使用的最小位域分配单元是32位字段或其他东西,那么大小实际上可能会增加.见ISO / IEC 9899:1999(E)§6.7.2.1/ 10

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读