我有一些GCC希望放入bss的全局缓冲区。不幸的是,这将导致bss节超出其分配的大小。我宁愿不因项目的混乱而更改链接器文件(有很多原因,这里只是让我感到幽默)。
将变量从.bss移到.data是否危险?
我是这样做的:
uint8_t data_queue[256] __attribute__ ((section(".data_queues")));
然后在链接器文件中,将.data_queues
添加到.data
部分。我检查了地图文件,缓冲区确实在.data
部分中。
我在程序开始时将data_queue
设置为0。
如果这样做,我可能会遇到问题吗?这是一个可怕的主意吗?有更好的解决方案吗?
答案 0 :(得分:2)
创建自己的部分。不要“移动”它执行.data段,因为它是UB(您在.rodata段中没有相应的数据)。
只需添加到您的链接描述文件中即可:
.mysection :
{
KEEP(*(.mysection))
KEEP(*(.mysection*))
} >RAM
uint8_t data_queue[256] __attribute__ ((section(".mysection"), used));