QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8949|回复: 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
    这里用一个不太常用的小例子说明一下。
    ( ~/ k. \& ~) y1 c8 s+ D
      @% u" N8 N+ q9 j$ ?% k) I' @# jmatlab 2009a代码:
    1. clear all
      3 G( O3 I  }; h) M% P: q
    2. tic
        W0 C, Q* a8 w+ H; V( q% X0 a
    3. s=0;- [2 n& V4 ~7 }( P4 x+ y
    4. for k=1:1000
      ! G( O2 i+ L; |$ o6 y1 ]
    5.   for i=1:10009 P6 r- \\" M8 B' n4 J, ~
    6.     a=linspace(2,2,1000);8 k  ^' ?  P, c/ Z% y
    7.     s=s+a(i);  h( T) S8 V4 m& H0 ~/ o; A
    8.   end2 s& G4 ?5 f* L
    9. end
      ! O; }% J% T( w0 M
    10. s2 c- N  F# O+ W, s
    11. toc& J5 _, ?. Z; X' f+ x% R
    12. . S0 E, E; n4 y$ n3 P* H8 P
    13. s =7 y1 W/ o  D- ?$ K
    14. 0 T\" z; T  c8 _' e* C
    15.      2000000
      / ?! G2 |$ h6 p  M
    16. 4 y5 d+ o- X3 e: L
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。
      L3 z6 B, U: O1 n" t
    ) ?! o, b4 i8 D. c--------% w7 [( d& ~/ |* Y; n  L! D
    . H" \0 S! k4 h) d
    Forcal代码:
    1. !using["math","sys"];( K. q6 b7 z5 G+ m. [2 i5 j  Z
    2. mvar:  a/ f4 G3 ~% A) Q9 M3 L# A
    3. main(:a)=/ }9 \. O. h1 T2 d7 ^# @( z
    4. t0=clock(),
    5. : g4 A! V5 F7 h+ U( Z( i
    6. s=0,
    7. . e/ _8 R, `/ z$ |2 i
    8. k=0, while{k<1000,
    9. - G( P! ?! G% h0 g* r
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    11. 8 l3 v/ r9 S: ~2 M; W4 \
    12.   k++
    13. # ?. E: A\\" Y: J5 [. m
    14. },
    15. $ w( G, t+ F$ P' n  ~7 K# ]
    16. s;
    17. 5 ~0 n; {8 {( O* z% ^( k
    18. [clock()-t0]/1000;
    结果:5 P% O4 p- O( B+ r) _. v- f: B
    2000000.
    * J/ Y$ {2 G2 C* G) Y: O8 d  O40.766 秒
    / c: x7 m8 h! \. a2 |! I/ X  @/ \; V3 j/ U' ]
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。
    ! ~0 V8 {; p4 N1 U8 Q& h因垃圾收集器多次启动,故耗时较长。9 `4 N1 S6 V; P, ~9 @

    + ?5 C: ~: O' q5 ]------------
    ( x4 K+ K; b& R& c
    & B* E3 \9 W: o% L; L+ @& J以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. \\" ]: K* M' `( V# P! Q3 p- k
    3. mvar:1 |. {5 O  e; ?* r- I9 z# G
    4. main(:a)=
    5. / B2 Z# ]7 _# k
    6. t0=clock(),
    7. \\" n! X& ^- C$ \# G
    8. s=0,+ q  [) z9 [5 m+ @3 i0 k2 I+ l
    9. k=0, while{k<1000,
    10. / D8 ]: s: ~- @
    11.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i). J0 O& y9 P3 X- I
    12.   k++, F& X. G9 h\\" b+ Z2 ?, u* F$ }! i
    13. },5 V; ^% e) k. g1 [- N% X! [
    14. s;* r4 }) N* G  U) Y9 g/ R* ?# ~
    15. [clock()-t0]/1000;
    结果:$ v) l) C2 B2 ~
    2000000.
    8 ]2 y. o7 J  \* m7 R4.609 秒
    5 W  D2 v7 U, e4 X; u( D! I# [' s) m' _  S) W0 v0 t  I4 I* @, Y% Y/ P
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    $ G! f; H5 v' U  N0 [在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
    : f7 R% b9 ?. X: J/ X6 p太强大了 看不懂啊

    ' H4 {, Q6 ?5 m1 `函数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
    : Y1 i; g; L: v) E. _; G函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    0 G' N7 V1 Q- X& Q4 i) b: C' d
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-17 04:35 , Processed in 0.441958 second(s), 73 queries .

    回顶部