QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8849|回复: 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
    这里用一个不太常用的小例子说明一下。& D, i& @7 i3 [1 {/ c

    . U& q1 [! @1 S. h& kmatlab 2009a代码:
    1. clear all
      \" Y; ?3 F; b6 ^% J4 d7 y+ I  w
    2. tic7 ]! ?\" \\" O1 Y
    3. s=0;
      9 H$ b+ ^  [- T- J# ?3 f  L  }9 l
    4. for k=1:1000
      7 T4 O; |7 [( V; v1 v9 C9 j
    5.   for i=1:1000
      * c6 l5 _( L7 [- a8 w/ _: f
    6.     a=linspace(2,2,1000);4 D# K1 m% m7 v* H( \4 s
    7.     s=s+a(i);3 j) }, n# y* X. Z( s+ u& N1 N
    8.   end$ W+ ~8 I' f. l! N: a) t
    9. end
      - v9 n8 d4 U6 v- }. z
    10. s4 H\" d5 L0 R\" l: v' ~5 X. B; R- K
    11. toc
        S% r: Y\" v\" u1 J7 [7 O; W
    12. 6 p9 O7 B7 }) Q* g: N
    13. s =( a( Y2 F, M5 P6 ~\" U* o
    14. 9 E, a8 i2 ~6 C/ v
    15.      2000000$ ^' O5 W% l2 |# F

    16. ! B6 f2 ?/ n6 |: J
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。8 ~9 c. X9 Y% B7 j
    3 W6 F/ A) x; q3 L; f6 r" w/ z
    --------, n- X* j. q  ?& j4 Z% [! E
    + {4 C5 y5 s, v  r9 E6 Q' i% R9 B! B
    Forcal代码:
    1. !using["math","sys"];
    2. # j6 q3 q3 y% L# x
    3. mvar:& D2 g& Y# \7 C: F% e
    4. main(:a)=! u3 |' e3 x) k% t
    5. t0=clock(),
    6. 6 i, M/ p. o' _9 `, g
    7. s=0,/ L$ u& Q. S3 N: @8 r
    8. k=0, while{k<1000,
    9. . E! a) O2 a0 \0 E
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)* d4 }- n1 z1 m2 f
    11.   k++1 T; z\\" @: b. b
    12. },+ P/ Z6 {/ H% t3 s6 X  O
    13. s;) i3 s. F- u6 K1 F5 V8 ^5 x4 m
    14. [clock()-t0]/1000;
    结果:
    0 b. k0 A) z! }0 o2 c/ d5 t! C2000000.
    % |% U) l; n' A+ I& y40.766 秒: d" @7 I) w/ q
    % O  B9 [: G7 D% t# V. A4 E6 J
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。1 p+ G# s+ u, i" e: n+ }
    因垃圾收集器多次启动,故耗时较长。
    7 y; \$ S( X9 V: y0 x! G0 v8 d3 c& ]) ^1 h8 N6 x" {
    ------------& d, [2 H& F  _/ W( u- }  I

    / f( x1 C+ r' `, a  |以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. . B0 m+ q. d9 J) M5 n
    3. mvar:\\" G) g0 o1 T9 r# a6 b$ g
    4. main(:a)=6 Y: S. q6 `+ ~) n! N
    5. t0=clock(),6 n6 r0 q! k' q0 N\\" V
    6. s=0,' O) d4 Z* D- j& o3 K
    7. k=0, while{k<1000,6 m\\" ~& V7 t* ^3 A: [6 d0 y
    8.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    9. 4 O+ E7 e& `4 n+ |! V3 u\\" \
    10.   k++
    11. : @$ |6 Z# m; K6 E' n/ B' L' q
    12. },& b4 J; ?* W6 R2 Y2 g
    13. s;  \+ v! M* M2 _- [0 E+ |
    14. [clock()-t0]/1000;
    结果:
    ! Q. k: r8 Q+ l2000000.: e- \( E% D7 a
    4.609 秒
    " M/ y; K) b/ N' N5 e; F
    8 E. [6 `. ^0 J$ Y0 y+ ^1 `9 s9 L2 ]可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    1 ~  x5 s7 h/ y3 n% \& V8 @在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
    2 M9 e6 r6 d3 M& ~& y$ }9 ~太强大了 看不懂啊
    ' {! E5 `1 t8 W' q' }, f0 Q% b" M
    函数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 # K& o% @/ q/ A  o) X$ V
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    0 {6 |3 i* D5 Q7 Q9 ~# K
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-18 01:17 , Processed in 0.781896 second(s), 74 queries .

    回顶部