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 无论如何在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |