缓式评估的实现!
来源:互联网 发布:java中destory什么意思 编辑:程序博客网 时间:2024/04/30 07:25
我们知道所有程序都是在操作内存.在底层的说就是通过内存来知道要做什么.知道做什么后在从内存中来抽取所要操作的数据,在把结果放到指定内存中!
我们随便的一句代码
a=b+0; //int a,b; 并对a b赋值.
如果是内置类型不用多说编译器采取的是所谓急式评估.就是说见到这样的语句不论上下文如何一定会做写什么.(ADD, MOV)
但如果下面接着在有一句这样的代码.
a=1;
似乎刚才的语句就很多余.
内置类型的存取我们还算能够忍耐.如果是一个对象哪.THIS指针的传递.赋值.等等,效率似乎就没有了.
如果我们能够避免这样的浪费,似乎要比一个说什么事就立刻去做的编译器要更人性化一些.
这就要提到我们的所谓缓式评估
意思就是说直到真的要用到它的时候在做最后的事情
比如对a赋值,用都没有就又一次赋一个新值.那就多余了,我们如果能到用的时候在取做相应的运算就似乎更能提高效率.
例如一个STRING 类,如果想都没想大家一定这么定义:
class string
{
char * p;
public:
string(char *);
char operator[](int);
}
如果这样那么不论是读取还是写都会调用同一个运算符[]函数.即使在类中多了一个const版本.也是针对const对象的.编译器是无法判断读和写操作的.
这样我们就不能写出效率很高的类.因为必须在operator [] 中进行相应的工作并返回一个char
如果想要实现缓式评估.那一般就会定义一个替身类
看看代码
class string
{
char * ptr;
public:
class mychar
{
private:
string & str; //很重要.这就是替身类的重要性.他能更好的区别读和写操作.如果没有STRING 那替身类就失去意义了.
int index;
public :
mychar& operator = (char ); //针对左值
operator char(); //针对右值
mychar(string s, int ii) ;
}
mychar operator [](int );
string(char *);
}
很简陋的一个类 ,但却能说明问题了
当
string s("123");
cout<<s[0]; //因为简陋我们都是假设我们要说明问题的例子
作为一个右值 调用了 string operator[] 产生了一个mychar对象.调用了operator char() 因为我们没定义operator<< 为了区别读和写
s[0]='1';
作为左值.调用了mychar的 operator= 这样就为我们设计一个缓式评估奠定了基础
我们可以在做为右值时采用急式评估.
在作为左值时采用缓式评估
例如作左直时
const char a='1';
s[1]=a;
我们可以简单的返回BOOL 而不返回mychar & 因为我们在函数中operator=里什么都不做 ,或者可以维护一个数据结构, 在operator char()中来取回这个直.
这些数据类型很简单,可能采取缓式评估会很愚蠢.但如果遇到大型软件,大型的数据结构,当他们进行运算或赋值时会很耗效率,采用缓式评估是个好办法!
- 缓式评估的实现!
- 使用缓式评估
- 浅谈缓式评估技术的好处及方法
- lazy evaluation缓式评估
- [转]森林火灾损失评估系统的研究与实现
- 公司评估综合业务处理系统的设计与实现
- 用Javascript实现评估用户输入密码的强度
- 用Javascript实现评估用户输入密码的强度
- mahout实现查准率和查全率评估的配置与运行
- 聚类结果的评估指标及其JAVA实现
- 二分类模型评估指标的计算方法与代码实现
- Ceilometer项目源码分析----ceilometer报警器状态评估方式之联合报警器状态评估的具体实现
- Ceilometer项目源码分析----ceilometer报警器状态评估方式之单一报警器状态评估的具体实现
- 可追踪评估模型TAM的评估
- 缓式评估、写时复制及引用计数的关系
- Javascript实现评估密码强度
- 对自己的评估。
- 评估级别的含义
- One-way Web Hacking
- 警告那些来我blog的垃圾人tmd别没事就发些垃圾回帖搞乱我页面
- k-均值聚类算法c语言版
- DOS图形记事本(基于GUI)源代码及设计文档
- web2(wm)修改之——xss漏洞发现及利用
- 缓式评估的实现!
- 概念混乱关于jdk,j2sdk,j2eesdk,jre(作者:quaine)
- 全面解读垂直搜索引擎
- CORBA简介
- Corba的模块模型概况
- CORBA技术及实例
- 利用ETCell报表控件开发进销存asp源代码
- 企业实施e-Learning成功的关键是咨询
- java正则表态式详解