将变量从.bss移动到.data是危险的吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将变量从.bss移动到.data是危险的吗?相关的知识,希望对你有一定的参考价值。

我有一些GCC想要放入bss的全局缓冲区。不幸的是,这会导致bss部分超出其分配的大小。我宁愿不为这个混乱的项目更改链接器文件(有很多原因,只是在这里幽默我)。

将变量从.bss移动到.data是危险的吗?

我是这样做的:

uint8_t data_queue[256] __attribute__ ((section(".data_queues")));

然后在链接器文件中我将.data_queues添加到.data部分。我检查了地图文件,缓冲区确实在.data部分。

我在程序开始时将data_queue设置为0。

如果我这样做,我可能会遇到问题吗?这是一个糟糕的主意吗?有更好的解决方案吗?

答案

创建自己的部分。不要“移动”它执行.data段,因为它是一个UB(你在.rodata段中没有相应的数据)。

只需添加到链接器脚本:

  .mysection : 
  {
    KEEP(*(.mysection))           
    KEEP(*(.mysection*))         

  } >RAM

uint8_t data_queue[256] __attribute__ ((section(".mysection"), used));

以上是关于将变量从.bss移动到.data是危险的吗?的主要内容,如果未能解决你的问题,请参考以下文章

依赖是危险的吗? [关闭]

BSS段 data段 text段 堆heap 和 栈stack

text段,data段,bss段,堆和栈

了解 C 中数据 bss 段的大小命令

bss段,data段text段堆heap和栈stack

bss段,data段text段堆heap和栈stack