QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8938|回复: 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( h1 r' W# p4 v) ~( o4 c& J
    ! r$ k5 w: X, E1 T; V% g& d! {3 C
    matlab 2009a代码:
    1. clear all& x/ [8 z\" O* S% x* z+ k
    2. tic* q! q- f, R5 i% j
    3. s=0;/ b* I. s7 y+ A8 T6 N( M# u
    4. for k=1:1000, H9 I9 h. H\" b4 L\" X/ A
    5.   for i=1:1000: t; e$ W0 U! e; l: {\" L( f
    6.     a=linspace(2,2,1000);% k7 |4 d0 A9 y, B' j
    7.     s=s+a(i);4 b1 N2 S' O' i: M' t' k, s0 b8 Y+ e
    8.   end
      1 J6 j$ x9 m/ B' w; D; d
    9. end
        C  k/ ]6 x' I# F+ ?! O$ D1 C, k
    10. s9 x+ b, J  Q) ^/ m3 ?
    11. toc* Y0 d+ p5 B8 N5 _9 ?- ^, g
    12. ) f# P  K# z0 Y2 @' ^! D6 s
    13. s =6 g! r: R! ~3 O! _3 R/ w5 P8 U; }
    14. ( N% f0 l0 H9 v5 C
    15.      2000000( c# e; H, m0 N! y* r* `  e, |\" s

    16. # a* }1 f/ X3 M\" l- O
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。( Q# O+ H4 E& N" [6 L* K

    3 Q9 n9 z; o! O$ J% Y--------
    , _: \/ c: ~! q7 o$ X+ T3 {# g4 O1 O2 [9 J: [7 a8 u  o" S* I" {
    Forcal代码:
    1. !using["math","sys"];: g2 M* N% {/ L
    2. mvar:\\" O4 {: K0 p! y6 Q, R, ?
    3. main(:a)=
    4. , m8 q7 H1 D% C: g) T/ N% E. Z
    5. t0=clock(),, r- ~# }4 }/ I& b4 u: U2 Y* k3 G
    6. s=0,
    7. ; s) C% b7 f7 I4 v\\" v5 n( Z
    8. k=0, while{k<1000,1 @+ G* \/ m8 w' b/ H
    9.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)# t' p# B9 g+ c% T
    10.   k++/ |0 a  p' S& d) h7 x& {* ]6 H
    11. },
    12. \\" S/ l+ i# r$ B' |4 [1 f
    13. s;
    14. & W' m3 A3 n! ]/ v7 `9 Y
    15. [clock()-t0]/1000;
    结果:
    ; g6 J& Q) K( ~2000000.5 h+ {: b( I- T  e! D: \
    40.766 秒
    7 W! ~' i4 _. k9 I, U/ k2 P; L
    ) I' E( ^! ?; o) y; S$ p程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    7 ]$ w0 ^) n* X0 L. k因垃圾收集器多次启动,故耗时较长。0 |) d, i+ ]( w' _
    2 D1 m% [$ ~3 f7 C! g
    ------------' ?5 j& K6 J0 I# ^

    1 @1 H, e) {& [# F以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. 5 H9 I' V. w4 q3 H\\" N/ Q7 G
    3. mvar:
    4. \\" `3 \  Q4 _* Z7 D- G, e
    5. main(:a)=
    6. 4 l) P8 g) d% Y7 ^( e5 D; k9 u
    7. t0=clock(),0 U* N: _$ @) s$ q3 T
    8. s=0,- w6 |* E$ ?' n0 Y. {7 b
    9. k=0, while{k<1000,
    10. 3 T8 T- |( \' g- N! a\\" l) I
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    12. & b; h) v* ^; y
    13.   k++
    14. 2 N' S; o' j- O- O+ r4 j0 S
    15. },2 @  t9 Y5 J: A  H. l
    16. s;
    17. \\" m# Y, ^$ ]) [5 _
    18. [clock()-t0]/1000;
    结果:
    / z9 o$ Y1 L( O% u0 h2000000.4 j: H$ o1 D1 |% ~  H! }
    4.609 秒
      `$ T2 ~: c  G. z9 h0 e8 r7 u) @# z4 O
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。, \- V" ?9 j) S8 y; j- o
    在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
    - p' f' |8 k1 H7 ?太强大了 看不懂啊
    2 D7 F8 n% z* n1 L, 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
    5 z6 @. v  K: X函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    3 o) t! |5 V& J: ^恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-6-12 10:26 , Processed in 0.382884 second(s), 74 queries .

    回顶部