c - 隐含的初始化变量不在 .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_start
and之间__bss_end
,汇编代码在跳转到 C 代码之前使用它们来清除内存
解决方案
推荐阅读
- react-native - 在 react-native-webview 中谷歌登录后的空白屏幕
- java - java -jar 类路径是指耳朵里面的jar
- php - Laravel 一次查询中的两个数据库连接
- python - 如何将参数从 xargs 传递给 python 脚本?
- php - 大于 2048 字符的 PHP 字符串变为 tu null
- xml - xslt 从 xml 中删除所有属性
- google-apps-script - 当在 Google 表格中选中“真”复选框时,是否可以向与该复选框在同一行列出的电子邮件地址发送电子邮件?
- c# - 如何将同一列中的值提取到不同的文本框中?
- angular - Angular Elements:如何在非 Angular 应用程序中使用多个 Angular Elements
- android - 如何在 Flutter 中使用 RGB 颜色?