善用"Assume No Aliasing"编译选项
来源:互联网 发布:孤陋寡闻的网络 编辑:程序博客网 时间:2024/05/24 06:16
善用"Assume No Aliasing"编译选项
作者:佚名 阅读人次:758 文章来源:未知 发布时间:2005-12-28 网友评论(3)条
据说,如果过程能够2次或多次引用同样的内存地址,那么过程就会包含别名数值。一个典型的例子如下:
Dim g_GlobalVariable As Long
...
Sub ProcWithAliases(x As Long)
x = x + 1
g_GlobalVariable = g_GlobalVariable + 1
End Sub
如果传递给这个过程g_GlobalVariable变量,则将通过一个直接引用以及x参数两种方式修改变量的数值2次。
别名数值经常是不良编程习惯的产物,对于程序优化有害无益。事实上,如果能够完全确认应用程序从来没有使用到别名变量,就可以打开"Assume No Aliasing"高级编译选项,这将告知编译器没有过程可以修改同一内存地址,使编译器产生更加有效率的汇编代码。更特别的是,编译程序将试图缓冲这些数据到CPU的寄存器中,从而明显地加速了程序运行。
总结一下,当遇到以下情况时,就不会有别名数值:(1) 过程不引用任何全局变量 (2) 过程引用了全局变量,但从来不通过ByRef参数类型传递同一变量给过程 (3) 过程含有多个ByRef参数类型,但从来不传递同一变量到其中的2个或者多个之中。
- 善用"Assume No Aliasing"编译选项
- GCC编译选项--"-fno-strict-aliasing"
- GCC编译选项--"-fno-strict-aliasing"
- MySQL编译选项 -fno-strict-aliasing随手记
- GCC编译参数strict aliasing详解
- 【GCC】gcc编译参数之-fno-strict-aliasing
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 编译选项
- 汇编assume
- 交叉编译opencv时候ffmpeg选项始终为no的解决方法
- 动态添加删除Spinner
- ORACLE9卸载
- WCF 入门文章推荐
- PreferenceActivity使用
- "Scalable Multithreaded Programming with Thread Pools" 阅读笔记
- 善用"Assume No Aliasing"编译选项
- 一个滑动展示的小代码
- 2 - Perl - 比较运算符
- Oracle数据库字符集问题解决方案大全
- [Centos5.4]字体
- oracle主键实现自增
- .NET CF C# 位图的任意角度旋转
- GT开发最基本安装
- java中的类的反射机制以及经典实例