const关键字

       在STM32中,关于const关键字和变量存储位置的理解有一些关键点需要澄清。

关于const关键字

    const关键字在C/C++中用于声明一个常量,即该变量的值在初始化之后不可修改。然而,const本身并不直接决定变量的存储位置(如Flash或RAM)。存储位置更多地取决于变量的类型、编译器设置、链接器脚本以及可能的编译器优化。

存储在Flash还是RAM?

  • Flash中的常量:在嵌入式系统中,特别是像STM32这样的微控制器,全局或静态的const变量(如数组或结构体)经常会被编译器放置在Flash中,因为它们的内容在程序执行期间不会改变,且Flash通常用于存储程序代码和只读数据。然而,这并非由const关键字直接决定,而是由编译器的默认行为、链接器设置以及可能的编译器优化决定的。

  • RAM中的非const变量:对于非const的全局或静态变量,它们通常会被放置在RAM中,因为RAM是可读写的,允许程序在运行时修改这些变量的值。

为什么加了const就认为在Flash?

这个观念可能来源于嵌入式编程中的常见实践,即编译器倾向于将const数据放置在Flash中,以节省宝贵的RAM资源。然而,这并不是一个绝对的规则,特别是如果你使用了特殊的编译器设置或链接器脚本,这些设置可能会覆盖编译器的默认行为。

编译器和链接器的作用

  • 编译器:负责将源代码转换为机器码(或中间表示),并在这个过程中进行各种优化。编译器可能会根据const关键字来优化代码,但不一定直接决定存储位置。

  • 链接器:负责将编译后的代码和数据片段组合成最终的可执行文件或固件映像。链接器通过读取链接器脚本(如果有的话)来决定如何将不同的段(如代码段、数据段、只读数据段等)放置在目标存储介质上。

结论

      虽然const关键字不直接决定变量的存储位置,但在STM32等嵌入式系统的常见实践中,全局或静态的const变量通常会被放置在Flash中。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值