gpt4 book ai didi

c++ - union 和内存对齐的问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:29 25 4
gpt4 key购买 nike

我目前正在开发嵌入式代码端口(在 Freescale S12 上),因此 GNU 和我对 union 有疑问。我有以下联盟

typedef signed short        sint16;
typedef signed long sint32;

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

我想访问 union 的最高 2 字节。问题是,AkkuHigh 和 AkkuLow 都具有与 Akku 相同的起始地址。它似乎是特定于编译器的。我的问题是:是否有一个编译器标志可以改变 union 的行为?attribute((align (2))) 可以帮助我吗?

提前致谢

最佳答案

是的,AkkuAkkuHighAkkuLow 都有相同的地址。这是如何unions在 C 中工作。从外观上看,您打算与一个 32 位成员和一个由两个 16 位成员组成的结构的成员建立 union 。你写的不是实现它的方法。试试看:

typedef union
{
sint32 Akku;
struct s {
sint16 AkkuHigh;
sint16 AkkuLow;
} representation;
} akku_type;

关于c++ - union 和内存对齐的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278177/

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