代码之家  ›  专栏  ›  技术社区  ›  sud03r

执行时间有差异吗?

  •  1
  • sud03r  · 技术社区  · 14 年前

    考虑这段代码:

    
    class A {
      void methodX() {
      // snip (1 liner function)
      }
    }
    
    class B {
      void methodX() {
       // same -code
      }
    }
     

    另一种方法是,我有一个类(AppManager),它的大多数成员都是静态的(从遗留代码来看,不建议我使用singleton;)

    
    class AppManager {
      public:
      static void methodX(){
       // same-code
      }
    }

    哪一个更合适? 因为两者都是内联的,所以运行时应该没有区别,对吧?
    哪种形式更干净?

    3 回复  |  直到 14 年前
        1
  •  6
  •   EboMike    14 年前

    首先,这是一个非常小的问题,除非每帧调用数千次函数(而且你正在做一些“帧”很重要的事情),否则你永远不必担心它。

    其次,如果它们是内联的,代码将(希望)优化到没有任何迹象表明函数是非静态的。会是一样的。

    即使它们不是内联的,差别也很小。ABI会将“this”指针放入一个寄存器(或堆栈)中,这在静态函数中是做不到的,但同样,最终的结果几乎是不可测量的。

    底线-以最干净的方式编写代码。在这一点上,表现并不重要。

        2
  •  0
  •   user415789user415789    14 年前

    在我看来,内联方式会更快。 因为内联函数在编译时在代码中被替换,因此不需要保存寄存器,所以可以调用函数,然后再次返回。但是,当你调用一个静态函数时,它只是一个函数调用,而且它的开销比内联函数大得多。

        3
  •  0
  •   Luka Rahne    14 年前

    我认为这是最常见的优化问题。在第一级,当你编写一个代码时,你要尝试每一个有助于编译器的技巧,所以如果编译器不能很好地优化代码,你已经做到了。这是错误的。在编写代码的第一个优化阶段,您要寻找的只是干净易懂的代码、设计和结构。这将使代码变得更好,手工“优化”。

    规则是:
    如果您没有资源来对代码进行基准测试,请重写它并花费大量时间进行优化,而不是不需要优化的代码。在大多数情况下,如果代码结构良好,很难通过任何优化来提高速度。