您的位置:首页 > 编程语言 > C语言/C++

More Effective C++ 条款18 分期摊还预期的成本

2015-09-23 21:14 302 查看
1. Over-eager evaluation("超急评估"):超前进度地做"要求以外"的更多工作,也就是在要求之前就把事情做下去.例如,以下class template用于表现数值数据的大型收集中心:

template<class T>
T& DynArray<T>::operator[](int index){
if(index<0)
throw an exception;
if(index>the current maximum index value){
int diff=index-the current maximum index value;
call new to allocate enough additional memory so that index+diff is valid;
}
return the indexth element of the array;
}


View Code
此函数在数组需要扩张时,分配两倍内存.对于此策略实现的operator[]调用之前代码,虽然逻辑上数组大小扩张了两次,但实际上DynArray只需分配一次内存,第二次扩张成本极低.

3. Over-eager evaluation实际上是一种"以空间换时间"的策略:Caching和Fetching都需要额外空间来(待)存放数据以降低访问所需时间.少数情况下,对象变大会降低软件性能:换页(paging)活动可能会增加,缓存击中率(cache hit rate)可能会降低.

over-eager evaluation和条款17的lazy evaluation并不矛盾:当必须支持某些运算但运算结果并不总是需要的时候,lazy evaluation可以改善程序效率;当必须支持某些运算且其结果总是被需要,或常常被需要的时候,over-eager evaluation可以改善程序效率.两者都比直接了当的eager evaluation难实现,但都可以为程序带来巨大的性能提升.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: