gpt4 book ai didi

c - 是否可以指示 C 不对全局数组进行零初始化?

转载 作者:太空狗 更新时间:2023-10-29 16:33:40 25 4
gpt4 key购买 nike

我正在编写一个嵌入式应用程序,几乎我所有的 RAM 都被全局字节数组使用了。当我的固件启动时,它首先用零覆盖 RAM 中的整个 BSS 部分,这对我来说是完全没有必要的。

有什么方法可以指示编译器它不需要对某些数组进行零初始化吗?我知道这也可以通过将它们声明为指针并使用 malloc() 来解决,但有几个原因我想避免这种情况。

最佳答案

问题是标准 C 强制静态对象的零初始化。如果编译器跳过它,它将不符合 C 标准。

在嵌入式系统编译器上,通常有一个非标准选项“compact startup”或类似选项。启用后,程序中的任何地方都不会发生静态/全局对象的初始化。如何执行此操作取决于您的编译器,或者在这种情况下,取决于您的 gcc 端口。

如果您提到您使用的是哪个系统,有人可能会为该特定编译器端口提供解决方案。

这意味着您显式初始化的任何静态/全局(静态存储持续时间)变量将不再被初始化。您必须在运行时对其进行初始化,也就是说,您必须编写 static int x; 而不是 static int x=1; x=1;。以这种方式编写嵌入式 C 程序相当普遍,以使其与禁用静态初始化的编译器兼容。

关于c - 是否可以指示 C 不对全局数组进行零初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com