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

时间:2018-09-06 07:24:20

标签: c memory-management data-structures pragma

对于以下结构对象

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 个答案:

答案 0 :(得分:4)

根据定义 1)struct的成员在内存中彼此分配。此外,在不同的内存区域中分配不同的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

  

...结构是由一系列成员组成的类型,其成员   存储是按有序顺序分配的,...