More Effective C++ 条款18 分期摊还预期的成本
2015-09-23 21:14
302 查看
1. Over-eager evaluation("超急评估"):超前进度地做"要求以外"的更多工作,也就是在要求之前就把事情做下去.例如,以下class template用于表现数值数据的大型收集中心:
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难实现,但都可以为程序带来巨大的性能提升.
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难实现,但都可以为程序带来巨大的性能提升.
相关文章推荐
- 项目24.1分段函数求值
- 【C语言】交换两个数的内容
- POJ C++程序设计 编程题#9:人群的排序和分类
- C++this指针、智能指针
- C++语言const修饰指针
- C++习题二第12题
- 文章标题
- 蓝桥杯 地宫寻宝 带缓存的DFS
- Effective C++——条款53(第9章)
- VC++编译器调试(一)
- POJ C++程序设计 编程题#7:字符串排序
- C++函数返回引用
- string c++ 详解 erase find .
- c++设计模式----解释器模式interpreter
- 【c++ templates读书笔记】【2】类模板
- 【c++ templates读书笔记】【2】类模板
- C++一个简单的手柄类模板
- C++学习记录之STL函数
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- OC语言混合编辑