首页 > 解决方案 > 隐含的初始化变量不在 .bss 部分

问题描述

[编译器 gcc-arm-8.2-2019.01]

我在 .c 中有一个变量:int ep;我希望它被放入 .bss 部分并具有 0 初始值,但在我检查 .map 文件后它被排除在 .bss 部分之外。如果我将行更改为: int ep = 0; var 被放入 .bss 部分。我的猜测是编译器发现 var 是writeonly,因此不需要将其值初始化为 0。但是这个 var 是由汇编代码读取的,也由另一个程序读取,编译器似乎不知道并做出错误的优化选择。

对这种行为有任何帮助吗?


从 .bss 中排除意味着,在我写的链接脚本文件中:

        .bss :
        {   
                . = ALIGN(64);
                __bss_start = .;
                *(.bss)
                *(.bss.*)
                __bss_end = .;
        } > DRAM

但是 varep不在__bss_startand之间__bss_end,汇编代码在跳转到 C 代码之前使用它们来清除内存

标签: cgccarm

解决方案


推荐阅读