QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 9128|回复: 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
    这里用一个不太常用的小例子说明一下。& @- h) [& ?1 g
    . H( I3 t8 ^4 p9 _# H
    matlab 2009a代码:
    1. clear all. C. `2 ~* t: R( z2 @
    2. tic
      ! P6 R\" m: s# l2 r6 I( S- f7 l8 T
    3. s=0;7 G% |1 f$ M! V4 `, @
    4. for k=1:1000
      5 ~4 X1 C; ^5 f
    5.   for i=1:1000' g; B4 p) @# ~6 W0 \+ R4 z+ [* S
    6.     a=linspace(2,2,1000);- f. [/ K, W# Y3 {
    7.     s=s+a(i);8 O$ w) ?( b3 O\" s8 _
    8.   end! k# b, v8 G; p* E\" v+ B3 F
    9. end
        v! L6 [; O$ C
    10. s( G% ~* U, i. L& d
    11. toc1 P2 Z/ z. n) o3 \7 J( \2 ^
    12. ' U\" {/ n6 `  ~
    13. s =
      # {5 V7 H' P) I, K

    14. ) g7 \3 h# d. E0 v4 @
    15.      2000000
      % H3 q: D1 @2 F) ^

    16. $ e8 v8 i' g0 S8 Y% B
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。! [) [* s' I7 d6 t7 h& O( x4 d0 R" Y3 e

    0 g9 h  g0 H: w* }6 R2 E/ i5 ?--------  ?; `: m6 [" L+ _  q
    2 L9 [. o% p( {
    Forcal代码:
    1. !using["math","sys"];
    2.   [7 E; u1 J( v. D+ a* k5 {+ V
    3. mvar:* v2 p+ D2 H4 q# b
    4. main(:a)=
    5. 5 [2 e* J7 E7 n# F! w, A& q3 Y
    6. t0=clock(),; O  ?2 m8 P7 O7 J6 \5 }' R
    7. s=0,
    8. : \  Z9 t2 d. v5 m3 v1 Z
    9. k=0, while{k<1000,9 @: }. j# F; r/ C
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    11. # j  y6 @! w* Z, y/ F$ Z
    12.   k++
    13. 4 Z8 I. ^' b$ k5 C  [& l\\" x
    14. },
    15. 9 b8 i9 X* q0 F! e, s/ j
    16. s;- T8 o+ f+ ?  o' E  E2 e+ K: ?( J2 L
    17. [clock()-t0]/1000;
    结果:6 e. x. H. E/ O4 o1 b9 U
    2000000.* E( B! Y. C8 F1 b$ Y9 j
    40.766 秒
    * }# K. K- F/ l& ^
    ; R$ A. S9 _( B7 @7 k5 x2 _程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    8 C- ^1 @2 ]8 ?, e. j  h- R: q因垃圾收集器多次启动,故耗时较长。) H; G6 F% g) p& ]/ \  G$ E7 W3 H
    ! J$ b7 Q9 @* X
    ------------
    3 p. ^# n* ~  B9 Q8 A" C; i5 w- v2 J5 N% z, x
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];: y* H1 D+ I8 L: w
    2. mvar:9 Y( D, t$ s& t# l1 K+ h3 U
    3. main(:a)=8 x7 D; E! C  y1 I
    4. t0=clock(),* r5 \: t5 ^. h8 f/ @. g, B! W
    5. s=0,+ |: B' V. @( A7 M
    6. k=0, while{k<1000,
    7. / q6 V8 J8 S/ w3 M% x/ [
    8.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    9. \\" |3 i, @& z\\" a8 v
    10.   k++) o\\" u/ u6 W/ l  p3 K
    11. },
    12. * V( r1 L+ a8 h. Z$ k  f
    13. s;+ D2 n* E- s; n
    14. [clock()-t0]/1000;
    结果:
    ( @8 J- |& A1 `' ^2000000.3 w2 h' f/ j9 A. N" z8 ?- S4 G
    4.609 秒
    5 C4 \  ]9 X  I) w9 W+ @. f3 @2 V3 D
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    : i/ C' \) ]; ]在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 : E: Y! x. r/ g8 |" D
    太强大了 看不懂啊

    ; a+ D& u- M$ R4 b2 c函数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
    : B% M4 [. G; ?# d函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    7 Z) j: j1 P, n  ]# }
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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, 2026-9-1 05:50 , Processed in 0.403808 second(s), 74 queries .

    回顶部