SAP ABAP关于提高效率,优化程序之谈(适合各种汇编以上的语言)

来源:互联网 发布:ccs软件介绍 编辑:程序博客网 时间:2024/05/21 22:23

原文出自ZZP的ABAP博客: http://hi.baidu.com/zzp0805/item/a5ff2a3a75d345cd382ffa1a


大家都知道,现在cpu识别的是指令

暂且不要考虑循环前置或者循环指令后置

但是高级语言都要转换成汇编语言来执行

 

指令现在在cpu都是分段执行的,分多少段要看具体的设计了

现在一个假设,假如一个高级语言是

a = 5;

b = 6;

c = 7;

转换成汇编之后会是

mov ax,5

mov bx,6

mov cx,7的指令

分段的话,先这样考虑指令分成:

读指令,执行指令

上面的指令,转化一下,可以变成这样:

原理是,第一条指令还没执行完,第二条就开始了,这些也就实现了众多指令同步,实现了流水线。


那么,我们就可以想想,如果有一个语句是:

如果有一个内表有50个数字,然后loop at 内表,某一字段的值:

loop at 内表.

if 变量 > 50

a = 5,b = 6,c = 7;

else

a = 6,b = 7,c = 8;

endloop.

那么会执行if指令,然后去判断,判断的时候,

赋值语句:a已经开始了,b也应该执行指令了,c也刚开始进入

但是,如果if一旦不成立,要执行else的话,

那if下面的3条语句就跑了,而且,流水线,会断了,会重新去执行else

然后重新去执行else的另外赋值

 

这个也就是我说了要少引起断流,

要先看看内表的值的大概分布,假如有1000条数据,其中比50大的有800条,比50小的有200条,那么用:

if 变量 > 50

a = 5,b = 6,c = 7;

else

a = 6,b = 7,c = 8;

就会产生200条断流

假如有1000条数据,其中比50小的有800条,比50大的有200条,那么用:

if 变量 > 50

a = 5,b = 6,c = 7;

else

a = 6,b = 7,c = 8;

就会产生800条断流

那就要改成另一种写法,速度会快一点:

if 变量 < 50

a = 6,b = 7,c = 8;

else

a = 5,b = 6,c = 7;

这样就只有200条断流了。

嘿嘿,大家很多是搞应用层的,不需要对底层太熟悉,但是知道某些原理对编程方面是很有帮助的。

希望这个指令级别的优化,会对大家的编程有帮助。

原创粉丝点击