none
请问,定义变量,是在for或者其他的循环内部定义好呢,还是在循环外? RRS feed

  • 问题

  •        针对这个问题,我想了好长时间了,我的做法就是在循环体外部定义一个变量(比如说整形,字符型),在循环内部使用,我的想法是这么做,在循环时候在栈上不会重复性开辟空间定义变量和释放空间,以节约运行时间。但我不知道这个做和这个想法对不对。

          现在遇到的问题是,在循环外面定义了很多变量,搞的自己都有点不清楚了,请高手给指点,或者介绍点这方面的书籍看看。

    谢谢。

    2012年3月30日 2:45

答案

  • 要看变量的复杂程度和实际用途。如果变量只是简单数据类型,就不用为了性能定义到循环外面。另外如果变量只是在每个循环内使用,我觉得可以定义到循环外,可能会带来另外的维护成本。例如每次都需要初始化。不一定有很高的效率。实际上编译器会做一些优化操作,这些优化考虑的方面比你考虑的要多很多。其实怎么将代码写的性能更好是一部分,另一部分是如何能够帮助编译器进行优化。比如他会考虑流水线并行,考虑尽量使用缓存而不是内存和页交换等等。如果你接触C++不久可以看看Effective C++,C++ Footprint and Performance Optimization。如果觉得不能解决问题。可以看C++反汇编与逆向分析技术揭秘。

     


    麻烦把正确答案设为解答。


    2012年3月30日 6:25
    版主

全部回复

  • 还有就是  定义字符串类型变量,在效率上来说,是定义char szPath[MAX_PATH];好还是char* pszPath = new char[MAX_PATH];
    2012年3月30日 2:51
  • 再添一问:在初始化字符串时候,是用memset效率高,还是用*(szPath + nLen) = 0;效率高?

     反正,我的大部分就是这类的问题,请高手给点指点,说个此类的书吧,谢谢了。

    2012年3月30日 6:22
  • 要看变量的复杂程度和实际用途。如果变量只是简单数据类型,就不用为了性能定义到循环外面。另外如果变量只是在每个循环内使用,我觉得可以定义到循环外,可能会带来另外的维护成本。例如每次都需要初始化。不一定有很高的效率。实际上编译器会做一些优化操作,这些优化考虑的方面比你考虑的要多很多。其实怎么将代码写的性能更好是一部分,另一部分是如何能够帮助编译器进行优化。比如他会考虑流水线并行,考虑尽量使用缓存而不是内存和页交换等等。如果你接触C++不久可以看看Effective C++,C++ Footprint and Performance Optimization。如果觉得不能解决问题。可以看C++反汇编与逆向分析技术揭秘。

     


    麻烦把正确答案设为解答。


    2012年3月30日 6:25
    版主
  • 一个是在栈上一个是在堆上,你觉得哪个性能好

    麻烦把正确答案设为解答。

    2012年3月30日 6:26
    版主
  • memset。*(szPath + nLen) = 0;这个不是初始化。而是把szPath + nLen地址对应的内存位置设置为0。

    至少应该用。*szPath = 0;


    麻烦把正确答案设为解答。

    2012年4月2日 2:44
    版主