- H# ?8 n' l, E- R- b( W
( T* Q* F G# z, c1 p; O: n
测试如下代码速度:
mvar: % y+ p5 U# N/ ]
t0=sys::clock(), # ~6 a l, y\" o4 V: o: B\" z
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s; 7 K. N4 z+ [/ U1 x0 Y
[sys::clock()-t0]/1000;
复制代码
结果: " h m( h8 R. v- L& [67100033.0 ^! ^6 r! {2 k" C+ u/ S
0.64 秒- P. S7 ~! X/ {; v h
/ s z) x8 a* [. y: M) c9 ~
==================* M! W7 l! {/ q+ i4 u. r
0 t" v: B- i6 C5 y; V3 j可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。 - X$ y5 O# N: {( L. ^; h 3 [# v2 n, e4 J3 W) u/ F==================. a+ f L+ i1 V9 [ A$ _) m
4 ~' t: p# ^! Q7 ~为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)? " P9 L) y/ P0 v2 Y$ `# V7 O) d4 u # `, B5 g- w/ x1 VForcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。 ' x" J/ E5 i7 Y _; J' @ # m. z7 B* [. r; I% A目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。 7 p8 C* ^) R$ _% D _% M+ I& ^+ Z8 g. o( ]9 k. L# f
对于脚本,编译效率和运行效率同样重要。