gpt4 book ai didi

我可以将全局变量映射到 .data 或 .bss 部分以外的部分吗?

转载 作者:行者123 更新时间:2023-11-30 18:49:19 25 4
gpt4 key购买 nike

如果我不在 .data.bss 部分映射全局变量,会发生什么情况。当我尝试将其映射到 .bss.data 之外的不同部分时,它会占用一些垃圾值。

我们可以为全局变量定义除 .bss.data 之外的其他部分吗?

最佳答案

在执行 main() 之前,会进行内存设置。

在嵌入式环境中,构建的工具(编译器、链接器等)通常会带来名为“crte”(C 运行时环境)的代码文件,其中包含相应的代码。也许只有当您与编译器制造商签订了特殊(昂贵)契约(Contract)时,否则他们可能不允许您获得这种洞察力。
该代码将用 0 填充“bss”部分,用定义的值填充“data”部分。通常,这些定义的值可以在非 volatile 内存中的另一个称为“data.rom”的部分中找到,它只是被复制到“data”部分。

如果您创建另一个部分,它将不会自动获得该便捷的服务。并非没有特殊的预防措施。结果是开机后内存中恰好存在的值。不是一个真正好的随机数生成器,但相当不可预测。这将符合您对“垃圾值(value)”的描述。

要么了解如何让 crt 执行此操作,要么自己执行。
让 crte 执行此操作的方法可能是链接器指令文件。它应该允许配置用户定义的部分。也许类似于“init0”或“init .rom”。当然,手册应该针对您的环境进行定义。

如果您自己执行此操作(可能是商业上不太理想的方法,即风险太大,太耗时),“只需”确保执行一些将值写入该部分的代码 - 在第一次访问变量之前。链接器可能将符号发布到编译器可见的标识符列表中,例如“__linker_section__begin”和“__linker_section__end”。使用它们来获得正确的内存地址。

关于我可以将全局变量映射到 .data 或 .bss 部分以外的部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284290/

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