QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8940|回复: 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
    这里用一个不太常用的小例子说明一下。  e( {. v1 i: T4 u' z

    ! L7 O5 M2 {. wmatlab 2009a代码:
    1. clear all
      0 `5 J6 r. G4 a) t  l; X
    2. tic
      . R' j; \) q) B5 I3 g
    3. s=0;
      / O3 e+ Q( A/ S1 |
    4. for k=1:1000
      , ?$ T, O0 s0 k, x# t* q
    5.   for i=1:1000( ^2 p\" d  X0 ?! Y
    6.     a=linspace(2,2,1000);  `$ b* B0 }1 f( g8 y
    7.     s=s+a(i);
      \" N+ L9 `+ O8 b, H  P
    8.   end) h5 G9 f6 X- U) R: Q. S2 ?, K2 \3 L! q
    9. end, o+ g  \7 A! x
    10. s+ h5 F, S: q) _+ y# ]
    11. toc6 T9 g, z1 h; h* U8 Z2 A/ k8 D! d

    12. & j( V4 ^  ]3 S
    13. s =
      3 Q4 c7 G0 t\" ~. y7 d' j( G+ ~5 m) ]

    14. ' f. e. N. T\" I: a( b5 J- H
    15.      2000000
      / l. C- D& a- K& I
    16. . a* u) {\" \6 {\" H' L
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。
    ) z' R; d: A* K! ?: H0 Q1 o
    * r* \7 W5 D9 e+ `" J--------" d* D2 `9 s$ u. _: `9 f0 o
    5 H/ A3 N1 W5 i- _2 x% }
    Forcal代码:
    1. !using["math","sys"];. P3 r8 I, d\\" |( \5 i* Y( R6 J: D( ^
    2. mvar:# G  B! }. I, m; j3 Z0 I
    3. main(:a)=; `\\" D+ Y3 R# \! q1 z; Z, t
    4. t0=clock(),+ y9 ^& U: r- Q4 U
    5. s=0,
    6.   L5 ^9 e' m9 Z+ I\\" v# e) _3 [
    7. k=0, while{k<1000,
    8. : n2 b  p, r6 C( p9 p
    9.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    10. - m' g1 V% V9 T. T
    11.   k++
    12. . [! l9 Y: P2 U# [
    13. },0 m; Q% D8 A$ O$ b3 X
    14. s;
    15. % x! A8 K( g6 ~3 S: U5 Z! Q6 A' z
    16. [clock()-t0]/1000;
    结果:# x7 ^& e! [2 C: t, J0 p5 @3 M' \
    2000000.
    + K1 L' s/ P+ D( g40.766 秒/ Y1 x0 f- W1 G& D6 t) X& b; E& i2 u
    4 c& t7 W+ h; N% r
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。7 P2 F8 V0 p: R* a  @& w. x
    因垃圾收集器多次启动,故耗时较长。) z) X* Q  ?1 \5 ~" g

    / d( O& d2 J0 k, [2 g* @7 T3 b------------
    % @/ m1 j* a( ~1 R) T& \. y- \- @! O7 v6 Z. l3 @. f) R* h6 _/ M
    以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];
    2. 0 k6 r9 M+ c, D. [
    3. mvar:
    4. 1 u0 K$ h\\" V6 ~4 K  J) D
    5. main(:a)=# y8 A+ m- m0 \$ k
    6. t0=clock(),* B\\" h! o% Q8 w/ N
    7. s=0,  X: F# v2 M  \: a4 i1 W
    8. k=0, while{k<1000,5 s9 D5 }, r$ y0 ~$ W3 J1 l
    9.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)
    10. + x$ o5 N4 f! c& X
    11.   k++
    12. : @' h1 ^7 Q8 T2 q9 k
    13. },, H, V: D9 ~! l\\" @, _
    14. s;6 ]% C* @3 |  K
    15. [clock()-t0]/1000;
    结果:
    4 ]( z, `# F" Q2 X5 [2 b* y5 B1 x/ I2000000.( l* C- @1 d5 u% l5 i" O
    4.609 秒7 D8 l  ^' V( z4 I$ d
    ( v2 p' o6 E2 x# P* I+ ?. [
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。
    2 h1 \* U1 T. U1 h$ ^3 g在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 , H! `/ M5 z' D' d& a
    太强大了 看不懂啊
      K+ v, Y# n$ r7 d  m( e
    函数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 + e8 m+ |' g2 g& Z( m4 K7 p! s
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...
    9 b' `6 R# l" S
    恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-14 00:24 , Processed in 0.478292 second(s), 74 queries .

    回顶部