测试变量状态

PHP有几个函数可以用来测试变量的状态,第一函数就是isset()。它具有如下函数原型:bool isset(mixed var);[;mixed var [,. . . ]]

PHP有几个函数可以用来测试变量的状态,第一函数就是isset()。它具有如下函数原型:
 bool isset(mixed var);[;mixed var [,. . . ]]

这个函数需要一个变量名称作为参数,如果这个变量存在,则返回true,否返回false。

序列化的变量和对象

序列化是将可以保存在PHP变量或对象中的任何数据转换成字节流的处理过程,这个字节流可以存储在数据库中,或者通过URL在网页之间传递。如果不使用这个处理过程,很难存储和传递整个数组或对象的内容。

随着session(会话)控制的引入,序列化的作用有了一定的降低,数据的序列化现在可以使用会话控制来实现。事实上,为了将会话变量在HTTP请求之间存储,可以使用会话控制函数来序列化会话变量。

但是,我们可能还希望将PHP数组或对象保存到一个文件或数据库中。如果要这样做,就必须了解如何使用这个函数:serialize()和unserialize()。

归纳变量和强度消减

一个重要的优化是在循环中找到归纳变量并优化它们的计算。对于一个变量^如果存在 一个正的或负的常数c使得每次x被赋值时它的值总是增加c,那么x就称为“归纳变量”。比如, 在i和t2都是B2组成的循环中的归纳变量。归纳变量可以通过每次迭代进行一次简 单的增量运算(加法或减法)来计算。把一个高代价的运算(比如乘法)替换为一个代价较低的运 算(比如加法)的转换被称为强度消减(strength reduction)。但是归纳变量不仅允许我们在适当的 时候进行强度消减优化;在我们沿着循环运行时,如果有一组归纳变量的值的变化保持步调一致,我们常常可以将这组变量删剩一个。

活跃变量分析

有些代码改进转换所依赖的信息是按照程序控制流的相反方向进行计算的,我们现在将要研究这样的一个例子。在活跃变量分析(live-variable analysis)中,我们希望知道对于变量x和程 序点P, *在点上的值是否会在流图中的某条从点P出发的路径中使用。如果是,我们就说x在 p上活跃,否则就说*在p上是死的。

活跃变量信息的重要用途之一是为基本块进行寄存器分配。这个问题的某些方面,在一个值被计算并保存到一个寄存器中后,它很可能会在基本块中使用。如果它在基本块的结尾处是死的,就不必在结尾处保存这个值。另外,在所有寄存器都被占用时,如果我们还需要申请一个寄存器的话,那么应该考虑使用一个存放了已死亡的值的寄存器,因为这个值不需要保存到内存。

变量表达式算法可用

交汇运算是交集运算,任何发现x+y在某个程序点上不可用的理由都会在流图中沿着所有可能的路径向前传播,直到x+y被重新计算并再次变得可用为止。第二,只有两个理由可能会使x+y变成不可用的。

1)因为x或y在基本块B中被定值且其后没有计算x+y,因此x+y被杀死。在这种情况下,我们第一次应用传递函数fs的时候,x+y就会从OUT[B]中被删除。

2)在某些路径中,x+y—直没有被计算。因为x+y肯定不会在OUT[ENTRY]中,并且它也不会在上面说的那条路径中被生成。我们可以通过对路径长度的归纳来证明x + y最终会从这条路径的所有基本块的IN和OUT值中删除。

«1»
最近发表
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
搜索
Tags列表
网站收藏
图标汇集
  • 订阅本站的 RSS 2.0 新闻聚合
友情链接

热门搜索: 外链域名 高外链域名 高收录域名

Copyright www.thyst.cn. Some Rights Reserved.