善用AssumeNoAliasing编译选项

2016-02-19 19:26 1 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的善用AssumeNoAliasing编译选项教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

据说,如果过程能够2次或多次引用同样的内存地址,那么过程就会包含别名数值。一个典型的例子如下:

Dimg_GlobalVariableAsLong

...

SubProcWithAliases(xAsLong)

x=x 1

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

g_GlobalVariable=g_GlobalVariable 1

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

EndSub

如果传递给这个过程g_GlobalVariable变量,则将通过一个直接引用以及x参数两种方式修改变量的数值2次。

别名数值经常是不良编程习惯的产物,对于程序优化有害无益。事实上,如果能够完全确认应用程序从来没有使用到别名变量,就可以打开"AssumeNoAliasing"高级编译选项,这将告知编译器没有过程可以修改同一内存地址,使编译器产生更加有效率的汇编代码。更特别的是,编译程序将试图缓冲这些数据到CPU的寄存器中,从而明显地加速了程序运行。

总结一下,当遇到以下情况时,就不会有别名数值:(1)过程不引用任何全局变量(2)过程引用了全局变量,但从来不通过ByRef参数类型传递同一变量给过程(3)过程含有多个ByRef参数类型,但从来不传递同一变量到其中的2个或者多个之中。

->

来源:https://www.tulaoshi.com/n/20160219/1620986.html

延伸阅读
下面是条件编译可用的预定义变量。假如变量不是 true ,就不被定义或者作为 NaN 处理。 变量 描述 @_win32在 Win32 系统上运行为 true。@_win16在 Win16 系统上运行为 true。@_mac在 Apple Macintosh 系统上运行为 true。@_alpha在 DEC Alpha 处理器上运行为 true。@_x86在 Intel 处理器上运行为 true。@_mc680x0在 Motorola 680x0 处...
第一步:在任何一个子目录下 untar 解开新的内核源程序。 tar xvfz linux-x.x.xx 第二步:rm /usr/src/linux 这通常是一个符号连接。 第三步:在 /usr/src/ 下建立一个符号连接到你的新内核目录。 ln -s xxx/yyy/xxx/linux.x.x.xx /usr/src/linux 第四步:将当前目录...
  C++ Builder是最快的C++编译器之一,从编译速度来说也可以说是最快的win32C++编译器了。除了速度之外,C++builder的性能也在其它C++编译器的之上,但许多Delphi程序员仍受不了C++builder工程的编译速度。的确,delphi的速度要比任和c++的编译器都要快好多。Delphi在编译一个小工程的时候可能不到一秒,大的工程一般也在5秒钟...
1.介绍 这是一篇彻底讲解如何用MSVC6.0建立Openh323的文章。这个篇文章是上一篇文章的延续,所以你需要在上篇文章的基础才能建立Openh323的工程。 2.首要条件。 如果要编译Openh323需要以下条件: 1. 安装有MSVC6.0或VS.net2003(本文没有.net下编译的介绍) 2. 一个以编译的PWlib的环境。 3. 一个Openh...
 linux内核编译详解 [本文最初由solaris发布] 一、内核简介 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取...

经验教程

506

收藏

99

精华推荐

编译指令#pragma详解

编译指令#pragma详解

Kong胡萝卜

女人要善用生理周期护肤

女人要善用生理周期护肤

bailetian8

ADO如何善用RecordSet组件呢?

ADO如何善用RecordSet组件呢?

李启威0

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部