gpt4 book ai didi

c - C 中是否可以为结构成员分配不同的内存位置?

转载 作者:行者123 更新时间:2023-11-30 18:27:52 24 4
gpt4 key购买 nike

对于以下结构对象

struct test
{
int a; //expect address location 0xabcd
int b; //expect address location 0xmnop
} test1;

期望为 test1 实例的变量 a 和变量 b 分配不同的内存位置。

我知道全局变量可以通过使用 #pragma地址

问题 1:这也可以扩展到结构吗?

如果不是,

问题 2:有什么更好的方法来做到这一点?

限制是:

  1. 两个变量必须在逻辑上保持在一起。
  2. 物理地址必须是独立的(可以以某种方式配置)。

编辑 1:为了进一步澄清,上面的结构包含指示特定缓冲区中的位置的变量。 (最接近的类比是队列中的读/写索引)然而,这里每个变量必须存储在单独的位置,以防止某些模块的意外访问。

最佳答案

根据定义1)struct 的成员在内存中依次分配。此外,在不同的内存区域分配不同的结构成员没有任何意义。即使在最奇特的嵌入式系统上也不行。

问题 1:不,您不能也不应该这样做。既不使用标准 C 语言,也不使用 #pragmas 等编译器扩展。

问题 2:使用指针。

typedef struct
{
volatile uint32_t* a;
volatile uint32_t* b;
} test_t;

test_t test =
{
.a = (volatile uint32_t*)0x1234;
.b = (volatile uint32_t*)0x5678;
};
<小时/>

1) 从 C17 6.7.2.1 §6

...a structure is a type consisting of a sequence of members, whose storage is allocated in an ordered sequence, ...

关于c - C 中是否可以为结构成员分配不同的内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52198622/

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