函数参数用const 关键字,我查了一下delphi的帮助,说是可以使编译器更优化,
但是我不清楚这个更优化是指内存占用更小?还是运行速度更快?还是两者兼有?

解决方案 »

  1.   

    是两者都可能
    比如你写一个const的变量赋值给一个变量,那么就可以直接将const变量的值替换.过去,不占内存空间.
      

  2.   

    还是两者兼有,表示你不对String进行修改,编译时就不用在加TryExcept进行保护了你可以参考《Delphi高手突破》或者《Delphi源代码分析》,不过也有可能不是,具体那本书我记不清了
      

  3.   

    有没可能用了const 关键字,运行速度还更慢的情况?
    因为现在我只需要保证运行速度
      

  4.   

    const 关键字和速度慢没有直接的必然的关系,关键还是算法的速度
      

  5.   

    用const优化主要体现在传值上,比如
    1、procedure A (s:string);
    2、procedure A (var s:string);
    3、procedure A (const s:string);上面的3种情况属3传值最快,因为const 只是传4个字节的指针。const 对于传递 string,动态数组和接口等使用引用计数自动管理生存期的类型的变量比使用 var 要快,因为生成的代码中不会附加对引用计数的增加减少等操作.对于一般 Size <= 4 bytes 的参数,如整数,对象变量,用 const 容易利用 register 优化生成更紧凑的代码.对于 Size > 4 bytes 的参数,const 方式实际也是通过引用来传递参数的.因此,一般 const 快一点.
      

  6.   

    使用const传参,对于一些结构类似就不需要进行复制,测试一下下面的代码Type
      MyRec = packed record
        I: Integer;
        J: Integer;
      end;
    Function ConstFunc(const R:MyRec): String;
    begin
      //取参数地址
      Result := format('%:.8x',[Integer(@R)]);
    end;Function NonConstFunc(R:MyRec): String;
    begin
      //取参数地址
      Result := format('%:.8x',[Integer(@R)]);
    end;
    var
      R: MyRec;
      str_Addr_Of_Const: String;
      str_Addr_Of_NonConst: String;
    begin
      R.I := 10;
      R.j := 100;  ShowMessage(Format( 'Address of Source                          = %s'#13#10 +
                          'Address of None-Constants Argument Passing = %s'#13#10 +
                          'Address of Constants Argument Passing      = %s',
                        [ format('%:.8x',[Integer(@R)]),
                          NonConstFunc(R),
                          ConstFunc(R)]));
    end;
      

  7.   

    视情况,const 可以直接编译成一个常数,不用访问内存