随笔分类 -  程序优化

摘要:基于栈空间的优化: 在C语言中函数调用是基于程序堆栈机制,函数调用会进行压栈操作,堆栈被用来保存函数返回地址、寄存器值、入参、局部变量等信息,在函数调用过程中需要在栈上分配空间并对栈空间初始化,一个典型的程序堆栈入下图所示: 函数调用时,首先分配被调用函数的参数空间将其初始化,将其压入调用者的堆栈中,然后将返回地址压入调用者的堆栈。被调函数的堆栈开始依次保存了ebp寄存器、其它一些寄存器的值(用于存放上一个函数的部分局部变量)、对于不能存放在寄存器中的局部变量信息将会保存在栈空间中。了解了函数栈机制,通过对函数进行适当的调整就可以显著的优化性能。 1:通过修改入参的传递方式的优化,一个典... 阅读全文
posted @ 2013-12-28 23:22 平凡之路 阅读(2428) 评论(2) 推荐(0) 编辑
摘要:基于处理器分支预测优化: 现代处理器由指令控制单元(ICU)和执行单元(EU)组成,ICU负责取指、译码,EU负责指令执行,为了并行处理ICU会预取指令,所以EU执行的指令通常ICU在前期就取出译码,对于含有分支的代码就包含多条取指路径,ICU在分支路径采用了分支预测技术,既预先选择一条分支取指译码,如果后期发现预测失败则需要重新取指,这意味着浪费了几个时钟周期。分支预测算法通常基于以前运行的结果来作为下次预测的依据。 1. 优化分支预测: 由于预测算法通常基于以前的结果,如果我们的代码分支条件的判断是有规律的,则有助于分支预测的准确性,如下例所示:#include #include #i.. 阅读全文
posted @ 2013-11-02 13:10 平凡之路 阅读(1682) 评论(0) 推荐(3) 编辑
摘要:通过设计合理的数据结构和算法将一些本需要在运行期间计算的信息预先存放在内存中来提升性能,是一种空间换时间的优化,下面一些实际的例子描述了这种优化方法的使用:在一个递增的数组中查询和待查找元素最接近的的索引例如数组[1,2,3,4,5],待查找元素为1.1返回数组索引0,待查找元素为1.6返回数组索引1,通过计算和数组每个元素的差值,循环遍历一遍数组可以即可得到索引值,如下代码所示:const double g_searchTable[] = {1,2,3,4,5};int getIndex(double data){ int index = 0; double temp; d... 阅读全文
posted @ 2013-10-17 22:30 平凡之路 阅读(4034) 评论(3) 推荐(1) 编辑