外部全局变量的C优化

时间:2017-11-02 12:59:49

标签: c optimization

如果我有一个使用extern声明变量的C文件 并在代码中修改变量,然后调用外部函数。

编译器优化会考虑函数触及变量的可能性吗?所以它不会改变C代码顺序并确保在调用函数之前在内存中设置变量?

1 个答案:

答案 0 :(得分:4)

你需要注意许多事情......但是在一个带有单个线程的基本C应用程序中,是的......这个应该没问题。

但是,如果你是(非详尽的):

  • 使用多线程
  • 在多个进程之间使用共享内存
  • 在低级系统上运行(例如:AVR / STM32)并在main()
  • 下的中断处理程序中处理变量
  • 在信号处理程序和main()
  • 下处理变量
  • 读取由硬件/ DMA修改的内存/寄存器

然后你需要小心。

volatile关键字非常有用 - 它会通知编译器,当您不查看"时,此变量可能会发生变化。

即使使用volatile关键字,您也可能会遇到Read-Modify-Write问题......

了解读 - 修改 - 写问题是争斗的一半......另一半正在减轻它,这可以通过一些optiosn来实现,例如使用一种称为Mutual Exclusion / Critical Sections的技术,或者,如果适当的话,在操作值之前将数据复制到局部变量中。