首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于合并和内存的问题

关于合并和内存的问题
EN

Stack Overflow用户
提问于 2014-12-03 17:41:50
回答 2查看 112关注 0票数 0

我目前正在开发嵌入式代码端口(在飞思卡尔S12上),所以GNU和我遇到了工会的问题。我有下面的工会

代码语言:javascript
运行
复制
typedef signed short        sint16;
typedef signed long         sint32;

typedef union
{
    sint32 Akku;
    sint16 AkkuHigh;
    sint16 AkkuLow;
} akku_type;

我想要访问联盟中最高的2字节。问题是,AkkuHigh和AkkuLow都有着与Akku相同的起始位置。它似乎是特定于编译器的。我的问题是:有没有改变工会行为的编译器旗帜?atribute((align (2)能帮我吗?

先谢谢你

EN

回答 2

Stack Overflow用户

发布于 2014-12-03 17:44:38

是的,所有的AkkuAkkuHighAkkuLow都有相同的地址。这就是工会在C中的工作方式,根据它的外观,您打算与一个32位成员和一个由两个16位成员组成的成员组成一个联盟。你写的不是实现它的方法。试一试:

代码语言:javascript
运行
复制
typedef union
{
    sint32 Akku;
    struct s {
      sint16 AkkuHigh;
      sint16 AkkuLow;
    } representation;
} akku_type;
票数 3
EN

Stack Overflow用户

发布于 2014-12-03 17:51:21

联合的正确定义可以在这个答案中找到。

如果您在32位或64位架构上编译,atribute(align(2))肯定会对您有所帮助。此外,在64位sizeof(sint32)上是8 (64位)。

根据体系结构的终结性,您可能需要交换AkkuHighAkkuLow

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

https://stackoverflow.com/questions/27278177

复制
相关文章

相似问题

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