我是这样试的,for i:=0 to 1500000 do 
 if a then 
   begin
   b  //执行次数1500000-1000次
   end else 
   begin
   c  //执行1000次
   end;b,c中都要操作数组,其中c 控制条件a,
问题是:
假设c的代码为空,执行时间就是70,
C不为空时,单独测试C,1000次循环所花时间仅为10但如果同时测试ABC
总时间就是150,也就是说 else 似乎用了70的时间?

解决方案 »

  1.   

    单独执行B,大约70C的代码比B多,但是C的执行次数少
      

  2.   

    你是说应该B比C的时间大很多吧?
    但是C的代码多啊,也许循环一次的时间比远远小于几行代码的时间比
    所以说问题不奇怪
      

  3.   

    if ... else ...这当中多了条件跳转指令,执行那么多次,CPU就要多执行N条指令,当然时间会拉长.
      

  4.   

    这里面除了多出来的指令以外,同时还有CPU指令流当中的预测失败问题,这个问题计算机组成原理当中应该都有讲.
    for i:=0 to 1500000 do 
    if (i % 2) = 0 then 
      begin 
        procedure_b(i);   
      end else 
      begin 
        procedure_c(i);
      end; 象这样子的指令,拆成
    [code=Delphi(Pascal)i := 0;
    while i <= 1500000 do 
      begin 
        procedure_b;
        inc(i,2);
      end;
    i := 1;
    while i <= 1499999 do
      begin 
        procedure_c;
      end;[/code] 
    效率会有相当大的差别.
      

  5.   

    i := 0; 
    while i <= 1500000 do 
      begin 
        procedure_b(i); 
        inc(i,2); 
      end; 
    i := 1; 
    while i <= 1499999 do 
      begin 
        procedure_c(i);
        inc(i,2); 
      end;