QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8668|回复: 4
打印 上一主题 下一主题

极限测试之Matlab与Forcal动态内存管理效率

[复制链接]
字体大小: 正常 放大
forcal 实名认证       

45

主题

3

听众

282

积分

升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2011-8-2 09:51 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    这里用一个不太常用的小例子说明一下。6 A2 T4 l% y+ z( Y

    9 y) Y6 d, L$ y  E; Xmatlab 2009a代码:
    1. clear all% Z% W5 n: {+ ^
    2. tic
      3 T- s( C% \: a# D0 |0 u
    3. s=0;% M. W. ?\" P8 {' g6 a
    4. for k=1:10002 w0 B. j' C, p; Q7 N
    5.   for i=1:1000
      ; L$ Z/ _8 h- m, K( `  X* Y$ _
    6.     a=linspace(2,2,1000);
      ' m# d& q& b* W
    7.     s=s+a(i);+ {( w; J  V. [9 _9 T# x+ ?
    8.   end/ W: Y$ d6 Y3 t5 ]1 f5 }
    9. end9 o+ n4 k( T( G4 ?5 W; W
    10. s! _7 W; F& `6 Q0 Q6 v- P
    11. toc
      ; Y% R* r/ n% T3 ?

    12. ; Q' ^- j% i. T! H\" j3 p
    13. s =8 Y; w1 U6 N  L9 e9 y

    14. - W& p\" N4 n# m) {0 U9 @+ n
    15.      20000003 H2 d- d- x! l) D0 B6 B' i  n

    16. 7 a7 S; V: f$ A( I1 _$ Y
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。4 j! e8 |; P- j5 i; O
    4 p4 a' D# ]* m. S
    --------; d/ E! j) W" x6 r3 C' H) y

    $ `& ]: [: E5 J% `; J/ @# CForcal代码:
    1. !using["math","sys"];
    2. . s4 g& X- }4 p+ Q% C1 I& u) a
    3. mvar:
    4. 3 `. b; T. v3 ~* W
    5. main(:a)=
    6. \\" Z1 W& g! L2 T1 e* H, t7 U
    7. t0=clock(),
    8. 3 X2 d, ]\\" [+ \
    9. s=0,7 \( m3 S5 _\\" |$ A1 [
    10. k=0, while{k<1000,# d4 k. z# e4 u; p  s8 |2 k2 Z& M
    11.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    12. & b8 s/ v- g\\" L2 B' b6 x
    13.   k++
    14. 3 z% ?; t* n. b- }. N& l* M( k
    15. },
    16. , W' A) {. I9 K3 ~
    17. s;: N6 J. @  {1 c. S6 r! O
    18. [clock()-t0]/1000;
    结果:5 _  _3 ?& e1 N1 w1 o* @; Y  v+ t; V
    2000000.# P# {% V0 R& W( v7 t
    40.766 秒2 {9 T0 N3 }: ]; B

    # F9 {; F) ~: j$ D8 c程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。+ a! Q' O" W  }8 I5 B
    因垃圾收集器多次启动,故耗时较长。; A$ f+ K* Z* t- i9 P( }: e! B

    7 U* t1 T# O. v0 |4 l------------
    1 D; W0 J$ h+ D+ N
    ( n" \0 q: X/ j0 t以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. . G8 G( k0 z+ I  h
    3. mvar:
    4. + E6 L; R( P1 H5 E+ K% k9 l
    5. main(:a)=
    6. # B, y( @/ W\\" L+ i; j$ S$ `
    7. t0=clock(),\\" G, B3 V) q3 m# w( f
    8. s=0,
    9. . E- F2 \2 T$ p  a. V. F, m
    10. k=0, while{k<1000,: f. W7 ^  ^  H: K0 P% F\\" f
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)& D\\" e  t9 h* `, u  l8 {* T! o
    12.   k++
    13. 3 ]4 H' I+ {) z, _( B7 Y1 R
    14. },
    15. # N: N; {' c6 y* N
    16. s;& [' s$ B. @$ [
    17. [clock()-t0]/1000;
    结果:
    : ]8 m) n" {# o; @9 _* |* h2000000.
      Q, W' Z; ~4 J/ L# @5 `8 J4.609 秒
    3 m8 N. ]8 V' r* q8 ~
    ) m8 h7 o3 g5 ?) n) U. J: \6 |5 Z可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。5 X- r# X0 _$ L/ t8 e
    在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    回复

    使用道具 举报

    forcal 实名认证       

    45

    主题

    3

    听众

    282

    积分

    升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    我就在你背后 发表于 2011-8-2 16:08
      ^) Q0 ~2 F) Z0 ]0 c7 }: K太强大了 看不懂啊
    9 X- C: M! L5 w, J% _' {
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

  • TA的每日心情
    开心
    2015-7-2 19:17
  • 签到天数: 300 天

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18
    8 P' z2 @& {, o5 r函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    - H) O1 k5 {- }3 H& P: c2 L
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    sxjm567 实名认证       

    8

    主题

    7

    听众

    2174

    积分

    该用户从未签到

    新人进步奖

    群组数学建模

    群组我行我数

    群组数学趣味、游戏、IQ等

    群组09年国际数学建模群—鹰之队

    群组电子科大数学建模交流群

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-11-15 20:01 , Processed in 0.557712 second(s), 73 queries .

    回顶部