gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:46:50 24 4
gpt4 key购买 nike

假设我有以下数据结构(伪代码):

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

现在假设我希望数据以下列方式存储在内存中:

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

有没有办法在 C/C++/Visual Studio 中做到这一点?我知道您可以在 Ada 中做到这一点,但这并不重要。

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

最佳答案

您可以使用 C 位域:

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

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

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

关于c++ - 有没有办法改变变量在内存中的存储方式(位大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6655197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com