编译优化生成坏代码
2011-07-13 10:37
176 查看
编译优化生成坏代码
(金庆的专栏)
以下代码来自: http://www.gossamer-threads.com/lists/python/dev/497519
#include <stdio.h>
long f(int *a, long *d){
(*d)++;
*a = 5;
return *d;
}
int main()
{
long d = 0;
printf("%ld\n", f((int*)&d, &d));
return 0;
}
用gcc4.1作测试.
g++ main.cpp 结果为5.
打开编译优化选项-O2,
g++ -O2 main.cpp 结果为1.
g++ -O2 main.cpp -Wstrict-aliasing
就会报警告: 提领类型双关的指针将破坏强重叠规则.
强重叠就是strict-aliasing.
先转为void*, 再转为int*就不会有警告了.
f((int*)((void*)&d), &d)
(金庆的专栏)
以下代码来自: http://www.gossamer-threads.com/lists/python/dev/497519
#include <stdio.h>
long f(int *a, long *d){
(*d)++;
*a = 5;
return *d;
}
int main()
{
long d = 0;
printf("%ld\n", f((int*)&d, &d));
return 0;
}
用gcc4.1作测试.
g++ main.cpp 结果为5.
打开编译优化选项-O2,
g++ -O2 main.cpp 结果为1.
g++ -O2 main.cpp -Wstrict-aliasing
就会报警告: 提领类型双关的指针将破坏强重叠规则.
强重叠就是strict-aliasing.
先转为void*, 再转为int*就不会有警告了.
f((int*)((void*)&d), &d)
相关文章推荐
- 编译优化生成坏代码
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- .NET 环境下运行时代码生成和编译
- 编译原理结构框架11代码生成
- robotium 在有源代码的情况下 写测试用例无法编译通过,生成apk。
- Java编译时注解自动生成代码
- eclipse编译android开源代码示范,及生成jar引用出错原因解析
- 代码的自动生成与编译(一)
- [深入理解Java虚拟机]第十一章 程序编译与代码优化-晚期(运行期)优化
- Android 编译时注解生成代码
- 《深入理解Java虚拟机》学习笔记(6)--程序编译与代码优化
- maven项目图标带红色感叹号(红灯、红点、红线)且保存时无法自动编译(无法生成class文件,提示Error: Could not find or load main class,或者代码改动后输出
- C#与.NET程序员面试宝典 2.2.2 面试题9:如何使用实时编译进行代码优化
- 解析四则表达式的编译过程及生成汇编代码
- Go1.7改善了编译速度并且会生成更快的代码
- C编译器剖析_5.1 中间代码生成及优化_简介
- 编译原理之代码优化
- 如何在 Visual Studio 中混合编译C# 和 C++代码,生成单一的DLL?
- 使用CodeDOM实现代码生成及动态编译
- 编译器,优化,及目标代码生成.