编译优化生成坏代码
来源:互联网 发布:cookie flash.js 编辑:程序博客网 时间:2024/05/17 03:08
编译优化生成坏代码
(金庆的专栏)
以下代码来自: 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)
- 编译优化生成坏代码
- 代码优化,编译优化
- 一张图解释编译过程词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
- 好代码,坏代码
- 好代码 坏代码
- 中间代码生成中的优化
- 如何优化代码编译速度
- 程序编译与代码优化
- 编译原理之代码优化
- 动态编译代码,生成dll
- 编译c++代码,生成mex
- 编译原理之代码生成
- 目标代码生成与代码优化
- 代码的坏味道
- 代码的坏味道
- 代码的坏味道
- 代码中的坏味道
- 代码的坏味道
- JQuery.getJSON 从aspx页面返回JSON数据
- js时间特效
- XXX.9.png文件的应用和制作
- 编写模块时的声明(含MODULE_LICENSE等)
- iPhone objective-c字符串类NSString的使用
- 编译优化生成坏代码
- 权限系统概要
- 如何使iOS地图加Annotation有从空中掉下来的效果
- struct sockaddr和struct sockaddr_in和struct in_addr
- 此刻的心情
- Build Android
- ExtJS国际化
- 二分匹配 Cat VS Dog (第一次 多校联盟 华东师大oj 2682 )
- ★★★ Visual Studio 2008 每日小窍门 【持续发布ing~】 Tips:054