【发布时间】:2013-01-19 02:39:21
【问题描述】:
我正在编写一个嵌入式应用程序,我几乎所有的 RAM 都被全局字节数组使用。当我的固件启动时,它首先用零覆盖 RAM 中的整个 BSS 部分,这在我的情况下是完全没有必要的。
有什么方法可以指示编译器不需要对某些数组进行零初始化?我知道这也可以通过将它们声明为指针并使用 malloc() 来解决,但有几个原因我想避免这种情况。
【问题讨论】:
-
其实不应该。通常链接器只保存 bss 部分的大小而不是它的(空)内容。固件只是清除所需的内存。如果不为阵列预留 RAM,您打算如何使用它们?
-
@FUZxxl 你是对的,我认为它是将零从闪存复制到 RAM,但我现在看到引导加载程序只是将等于 BSS 部分大小的零写入 RAM。这似乎仍然没有必要,因为我不依赖大多数数组进行零初始化,但它不会像我想象的那样影响性能。我编辑了我的问题以反映您的信息。
-
我认为这取决于工具链。在我使用的工具链中,我可以指示链接器不初始化或加载部分。这实际上对于某些部分是强制性的(数据在多个内核之间共享)。
-
github.com/dwelch67 这是我的正常操作(不是零 bss,不是复制 .data)查找并更改您的引导代码(在 gnu 工具链世界中通常命名为 crt0.S)或者只是让您的拥有。