QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8860|回复: 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
    这里用一个不太常用的小例子说明一下。  s) _5 K/ R0 |3 X) v7 P: I4 _6 d

    ; I3 l/ \2 B+ Y1 M. p7 ~matlab 2009a代码:
    1. clear all
      2 O) Z3 k( B% |5 i\" a  M7 p% e
    2. tic4 T4 j6 p' H! x) f- m2 [5 K* x
    3. s=0;1 l! _6 H7 h; q( f: O! m( E; q3 {
    4. for k=1:1000
      \" x* X; P5 L% ]+ i0 i\" f/ i! \
    5.   for i=1:1000) d2 E2 x+ @( o
    6.     a=linspace(2,2,1000);
      : U' W7 w/ u\" w; D5 U
    7.     s=s+a(i);- _  e+ i6 f& k/ Y0 a. V' J
    8.   end
      ' D, N* T6 u0 s! s: E
    9. end
      0 T; Y0 R! G- q0 Y- R3 C. a6 F4 u) ~
    10. s/ c; l% ^# i\" g. l
    11. toc# e4 N7 G2 k5 B# V7 d2 w) j. C\" t

    12. - B  R0 {. Q4 e7 t. J; T
    13. s =! H4 o8 m- e, [: u5 v
    14. , _\" l! Q4 q/ U, J4 n. M
    15.      2000000- V% L6 [5 a: [6 B
    16. \" O4 q* u7 i3 q, D
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。
    . N2 `" o. I! e9 N
    3 c3 S- N( U$ U& M" t9 V) @--------: u% f" h4 h* w9 S0 l: w

    4 `8 C( q, [! L2 VForcal代码:
    1. !using["math","sys"];, W! |6 F' Y$ r- F0 X
    2. mvar:
    3. ; `- U/ \2 d1 v
    4. main(:a)=
    5. ' K* ?0 u1 C: s' B. `4 K: y: O1 X
    6. t0=clock(),
    7. & W- }* Z! b2 _5 v. Q
    8. s=0,
    9. . w$ C9 F; x* k\\" d! v2 M; i( e
    10. k=0, while{k<1000,
    11. \\" M% a3 O# N1 o. w. S% e
    12.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)# M$ v: l+ ?; ?5 Z
    13.   k++' y1 n5 f; Y* G\\" ~& m& J9 p
    14. },. H- E* i$ @! D\\" Z* |8 D
    15. s;9 o; H& z) o! s4 }1 R8 G2 K5 m2 f
    16. [clock()-t0]/1000;
    结果:
    ; X9 g  A% l  d) X% V6 V2000000.7 I2 m3 j, v+ J
    40.766 秒- R3 d- {% e+ n, [: D4 C
    7 [+ ?8 C% k2 `  _% \; L
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。: W8 r+ J4 V/ N& t8 {7 ?* }/ d
    因垃圾收集器多次启动,故耗时较长。8 R! i4 l# Q& Q, q; q
    6 K$ B3 `4 x! r0 v8 _7 Z% I2 m, G
    ------------4 m# s% G; d# t* y$ \
    ! U5 V* D% c9 D0 H
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. ' D; W+ n! n2 W  N& F* _  A
    3. mvar:
    4. 9 x  H& X' T6 ]* y  _9 k5 m
    5. main(:a)=
    6. * U8 |9 C8 _\\" ^6 D
    7. t0=clock(),
    8. 4 n; z6 `/ h6 D: O; Y
    9. s=0,* L( \2 ?) J8 g. \# s
    10. k=0, while{k<1000,
    11. 1 a6 G$ v. c1 [  l8 f7 W5 Y, y
    12.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    13. # ?5 z7 j; F3 \4 w, U& w  M
    14.   k++
    15. 5 \7 B( A  g/ H$ ~2 f  g
    16. },
    17. & x/ j' N& U. w; }3 U
    18. s;
    19. 2 [5 C( f- j( d, d( R
    20. [clock()-t0]/1000;
    结果:4 G' u  y4 g6 ?0 J! a. X
    2000000.
    3 y( ~! K# |. L: J6 F) i8 e2 `4.609 秒
    0 s4 m( E" ^( p9 S( K# \/ Q
    8 `# V9 H* J+ H* f可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
      u6 G7 I6 r3 I在Forcal中,函数oo{ }不仅提供了运算符重载功能,而且会自动高效地回收垃圾。通常,所有涉及到对象的代码都要放到函数oo{ }中。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    sxjm567 实名认证       

    8

    主题

    7

    听众

    2174

    积分

    该用户从未签到

    新人进步奖

    群组数学建模

    群组我行我数

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

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

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

    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

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

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    forcal 发表于 2011-8-2 18:18
      p8 \& X1 t+ Q  Q: u函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    7 _* q- P6 ^* _3 v恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    forcal 实名认证       

    45

    主题

    3

    听众

    282

    积分

    升级  91%

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

    [LV.1]初来乍到

    我就在你背后 发表于 2011-8-2 16:08   ^2 a: m. ~5 y/ m: O* P# L7 l! R" @
    太强大了 看不懂啊
    ( }: l3 ?. y5 i6 p: F
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forcal如何处理垃圾对象和进行内存管理。
    回复

    使用道具 举报

    36

    主题

    3

    听众

    1734

    积分

    升级  73.4%

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

    [LV.8]以坛为家I

    群组2012第三期美赛培训

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-20 09:08 , Processed in 0.394387 second(s), 74 queries .

    回顶部