实践记录: G++4.x与VC 2005 局部优化比较: >位操作优化一例及volatile优化
来源:互联网 发布:淘宝童装词汇 编辑:程序博客网 时间:2024/05/18 02:59
今天心血来潮, 写了一个取整数高位和低位的模板, 在G++和VC下用优化编译, 代码在最后. 简单记录一下结论:
对于有符号整数:
i >> k ;
i &= mask ;
如果K和mask均为常量, 且mask高k位全零, 低位全1的时候 ,g++可优化为无符号右移操作, 类似其它语言里的>>>, VC不作此优化
对于volatile 变量:
g++严格不优化, 每次写/读都访问内存.
VC发现程序该变量在连续直接使用(中间不调用其它函数)且最后是写操作时候, 中间不再访问内存. 直接使用寄存器. 类似CPU流水线寄存器指令引退.
1 template <typename T>
2 class is_signed_type { public: static const bool value ; } ;
3
4 template <typename T>
5 const bool is_signed_type<T>::value = ( (static_cast<T>(-1) >> 1) == static_cast<T>(-1)) ;
6
7
8
9 template<int shift, typename T>
10 inline T int_low(T n) {
11 T mask = ~(static_cast<T>(-1) << shift) ;
12 return n & mask ;
13 }
14
15 template<int shift, typename T>
16 inline T int_high(T n) {
17 if (is_signed_type<T>::value) {
18 const int rshift = sizeof(T) * 8 - shift ;
19 T mask = ~(static_cast<T>(-1) << rshift) ;
20 n = n >> shift ;
21 n &= mask ;
22 return n ;
23 }
24 return n >> shift ;
25 }
26
27
28 int _tmain(int argc, _TCHAR* argv[])
29 {
30 __int32 volatile i ;
31 i = 0xFFFFF ;
32 i = int_high<15>(i) ;
33
34 i = 0xFFFFF ;
35 i = i >> 15 ;
36
37 printf ("%x/n", i) ;
38
39 return 0;
40 }
41
- 实践记录: G++4.x与VC 2005 局部优化比较: >位操作优化一例及volatile优化
- volatile与编译器优化
- ARM9与ARM7的比较及优化
- ARM9与ARM7的比较及优化
- redis 与memcache 比较及优化
- CCS编译优化与volatile
- CCS编译优化与volatile
- IAR踩坑:优化与volatile
- 位运算与优化
- G.729与G.723语音编码介绍及优化
- G.729与G.723语音编码介绍及优化
- JOIN操作及优化
- AS3位移与位计算性能优化比较
- C#性能优化实践(一)
- 优化介绍及应用实践
- iconfont 实践及使用优化
- C++中volatile及编译器优化
- Android 性能优化记录一
- HTTP缓存ETAG/Last-Modified
- 篇韵文 便识天下汉字(转载)
- 4 Steps to Consume Web Services using Ajax
- 面向对象设计中的多种分层方法
- 电子商务类站点终极资源大全(上)
- 实践记录: G++4.x与VC 2005 局部优化比较: >位操作优化一例及volatile优化
- 不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长;
- oracle Function
- 一种生成不重复数的算法【转】
- 微軟ERP財務金額轉換為大寫
- 一个比较少见,但调试有用的函数
- 2010-02-23
- vc++的绝好网站
- rundll32.exe命令使用大全【转】