当前位置:首页 » 编程软件 » 防止变量被编译器优化

防止变量被编译器优化

发布时间: 2023-07-01 12:12:06

‘壹’ 怎么指定某段代码不被编译器优化掉

c语言中, 某些语句,如:
int a;
a = 0;
a = 1;
a =2; 这个可能编译器会把前面两句给优惠掉, 这个如果 前面两句也是必须要执行的, 可以把 int a 改成 volatile int a。
在编译的时候, 编译器可能会预测到某个变量的值, 就把中间的没有必要的语句给优化掉,volatile 关键字就是告诉编译器,不要做这样的预测性优化, 按照文本代码来翻译。

‘贰’ 如何防止因编译器开启优化,而导致程序执行错误

我的经验是:未优化的c程序可正常运行,优化后不能运行,那一定是我的程序有问题。我还没经历过不是我程序的情况。
发现这种不易发现的问题,需要看汇编码。
避免的方法,我的经验:写c程序,尽量规矩;似是而非的概念,一定要搞清楚,别侥幸。因为侥幸而留的雷,现在不出问题,将来一定会出问题;不优化不出问题,优化就出问题。
最后要说,每个应用程序,都让他开优化运行,只要时间允许,一定要查出开优化后出问题的原因。时间不允许,只能不开优化凑合着,在有时间的时候继续查问题。

‘叁’ keil uvision4 用c语言编译没有错误,但是个别语句被忽略了没有编译成汇编语言。怎么回事啊

你用的什么单片机呢?如果是51,这种情况应该不会出现,如果是AVR或者ARM内核的单片机,有可能是你的变量被优化了,从而导致部分代码被优化了.
两种解决办法,一是设置Keil的编译器,把优化级别调整到0,也就是禁止优化.
二是,把你的全局变量定义之前,加个 volatile,禁止编译器优化.

‘肆’ c语言防止优化

编译器编译命令里有设置选项,通过设置,你可以要求 不优化,也可以要求用哪种优化。
具体选项有哪些,要查自己编译器的帮助文件。
例如,MS VC++ 6.0 编译器编
优化选项:
/O1:优化使产生的可执行代码最小
/O2:优化使产生的可执行代码速度最快
/Oa:指示编译器程序里没有使用别名,可以提高程序的执行速度
/Ob:控制内联(inline)函数的展开
/Od:禁止代码优化
/Og:使用全局优化
/Oi:用内部函数去代替程序里的函数调用,可以使程序运行的更快,但程序的长度变长
/Op:提高浮点数比较运算的一致性
/Os:产生尽可能小的可执行代码
/Ot:产生尽可能块的可执行代码
/Ow:指示编译器在函数体内部没有使用别名
/Ox:组合了几个优化开关,达到尽可能多的优化
/Oy:阻止调用堆栈里创建帧指针

/O2 为了加速,会优化掉。 选 /Od 不优化。

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:642
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:368
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:89
php微信接口教程 发布:2025-04-16 17:07:30 浏览:312
android实现阴影 发布:2025-04-16 16:50:08 浏览:794
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:348
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:213
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:818
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:369
土压缩的本质 发布:2025-04-16 16:13:21 浏览:596