【问题标题】:Is it possible to allocate same address to two different global variables in C?是否可以将相同的地址分配给 C 中的两个不同的全局变量?
【发布时间】:2020-06-29 11:02:19
【问题描述】:

是否可以在同一构建中为 C 中的两个不同全局变量分配相同的地址?我尝试了几种使用链接器的方法,但没有成功。如果不允许,有人可以详细说明原因吗?如果允许,该怎么做。

编辑 1

例如在 {file1.c} 我有一个全局变量 {int a} 在 {file2.c} 我有一个全局变量 {int b}。是否可以将它们链接到相同的地址?我在这里不提供详细信息,因为我已经分析了实现此目的的其他选项。这个问题的目的是知道相同的记忆链接是否可能。

【问题讨论】:

  • 能否详细说明,问题不是很清楚?您实际上试图解决什么问题?你的平台是什么?
  • 如果你操纵链接将两个对象放在同一个地方,它们将是相同的,而不是不同的。
  • 联合他们??
  • 有很多可能的答案,联合,指针,链接器,...你需要明确你想要做什么
  • Re“我不在这里提供细节,因为我已经分析了其他选项……”:这是狂妄自大。该站点的参与者累积了数千年的经验和随之而来的知识。所有正常问题的解决方案,包括不常见的问题,都是已知的,并且大多内置于工具中。尽管您声称进行了分析,但极有可能有更好的方法来实现您的最终目标。不提供详细信息是自私的:Stack Overflow 不是为您提供个人服务的网站;它旨在成为所有人的持久信息库。

标签: c linker embedded linker-scripts


【解决方案1】:

如果你使用 binutils ld 你可以使用 overlays https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_22.html

我自己也经常使用它。

【讨论】:

    【解决方案2】:

    我通过使用链接器级符号找到了解决方案。所以它就像使用变量的部分属性一样简单。在链接描述文件中,在转储部分之前,使用 PROVIDE 创建要在另一个 C 文件中使用的符号。

    所以在我上面的例子中:

    file1.c
    int __attribute__((section (".config_value"))) a = 10;
    
    file2.h
    extern int b;
    
    linker.ld (in the section you want to dump)
    PROVIDE(b = . );
    file1.o(.config_value)
    

    然后file2.c 中的变量b 的值也为10。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2015-10-25
      • 2011-11-08
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2021-01-12
      相关资源
      最近更新 更多