QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8867|回复: 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
    这里用一个不太常用的小例子说明一下。
    . G+ ~; y0 R* z7 F! q  X! ?+ {4 a
    3 ?. ]' _# _: [' n) S: e- ?2 [matlab 2009a代码:
    1. clear all' h  n7 ?8 ?4 s* F
    2. tic
      # U% `! e& T: |0 _
    3. s=0;
      4 V; ~- a  g, Y2 p
    4. for k=1:1000
      $ S+ [) }* v7 v\" T7 U
    5.   for i=1:1000
      0 V5 t+ l8 O1 e! _
    6.     a=linspace(2,2,1000);! X4 o4 _5 Z, J1 K6 _
    7.     s=s+a(i);
      ) w% e) d% U* r5 I+ Q2 a( f( M9 [% k: |
    8.   end
      3 h% I+ o# |- e$ P( ]
    9. end
      3 l! u( n$ h, |) x
    10. s
      ) Q; L1 A3 }. e4 x( ?9 E
    11. toc
      ' i\" u/ a! Q4 C  m

    12. $ ?, N1 K- ]: r\" V7 b, e, {
    13. s =
      & w3 x. v+ l/ t- Y4 y1 M( d

    14. 3 G% o0 e  A7 U# Z- m+ k
    15.      2000000
      ; ]* A& H8 Y5 Q% g\" T4 b
    16. - x\" P& }1 k* l
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。) m) P! J3 c! d8 M* Q

    4 |/ ?/ G" ?3 {/ X  B--------0 y* U6 L" `; o9 Q9 V
    0 t2 J1 K& Q: T/ z2 T3 x
    Forcal代码:
    1. !using["math","sys"];
    2. ) J* v\\" s  q6 K  ?
    3. mvar:1 L0 r\\" V/ U/ I
    4. main(:a)=7 q! ]5 v0 y9 j5 u3 u4 p
    5. t0=clock(),8 C- p& X8 g8 ]5 Z  J( e
    6. s=0,; h, ]$ I) t: U\\" ?& v1 s  U1 d
    7. k=0, while{k<1000,2 e5 a8 A3 L4 a: n, q6 E
    8.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)6 T( U$ b- D0 y7 {9 N  `) x
    9.   k++
    10. 1 w0 e1 T\\" i/ A$ q& q2 J; \0 F! \7 O
    11. },
    12. 8 U& y4 v2 m4 j\\" C! u\\" K( C( R
    13. s;; M( z( O2 f# H. A
    14. [clock()-t0]/1000;
    结果:
    ' y; z2 l# ^7 L! X; b; \+ A. e$ n2000000.- C0 x! i! `) Y. [: ?+ [5 d
    40.766 秒4 }3 D; C# s7 o3 b
    / @2 J1 U+ ^" ~) _
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    ; p( Z# }' m% N6 G* Q, @因垃圾收集器多次启动,故耗时较长。4 o. I" n- C% C, J" u7 Z. Q
    * L( ]# [# @" J4 G
    ------------" U- w* g2 {7 |7 a' x& p
    2 g6 _$ w" I, v6 N* t, w" h
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. 5 l$ Y$ d2 `. x* N) S7 @' \
    3. mvar:& w9 K\\" H& {& e  i3 |+ s: S# i
    4. main(:a)=
    5. $ k: x0 H/ w1 M. V9 ]
    6. t0=clock(),
    7. % j! g7 H0 o  C6 G: I& G
    8. s=0,( W. q$ g0 R4 Z( E6 w$ d+ W  J; ]
    9. k=0, while{k<1000,
    10. 8 ^  C! g$ g* K
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i): L: F% m5 N. ^( s+ G2 _
    12.   k++& ^& _( l8 B( E  X  D! w# Z/ C
    13. },2 ^4 w0 D4 p  t; s3 k
    14. s;) B* ^) S9 m, u\\" Z
    15. [clock()-t0]/1000;
    结果:2 j. k9 Y( \$ Y& C+ I
    2000000./ _7 V* `% z  Z
    4.609 秒
    $ n  m( N/ U1 E; n4 J0 d4 O% q6 u6 X/ s# J4 F% L5 D. M
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    " G, X8 |8 D# @/ c1 e: p3 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
    ' n- k* z6 u7 |3 `4 ?* I$ o; O, _太强大了 看不懂啊
    8 o7 Z" [' m/ i8 c2 V/ `
    函数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
    0 u6 c2 y2 E8 w& _3 |1 f函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    0 X3 d" K: `: K) O恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-4-20 23:24 , Processed in 0.480139 second(s), 74 queries .

    回顶部