QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8861|回复: 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
    这里用一个不太常用的小例子说明一下。3 R; H# W8 L  i# j, q; I3 Z
    3 }* [2 a- ~; e& b2 ?; d
    matlab 2009a代码:
    1. clear all( Y% {# h1 z; V
    2. tic5 r6 I# H/ V3 r
    3. s=0;
      ' u* @+ C4 r: Z& T
    4. for k=1:1000
      , ]8 Y2 K0 j! c
    5.   for i=1:10001 @9 n8 h( I( e, Z2 W! X
    6.     a=linspace(2,2,1000);+ Y& U; O: h0 o7 l
    7.     s=s+a(i);
      % c/ t: e  n4 ~1 j' i( J
    8.   end/ u& b/ I+ |' {
    9. end; l. C6 A# ~# m# x' V/ L( i
    10. s
      7 S0 w0 q4 G$ `
    11. toc
      & K! \/ I- G+ U2 R

    12. 1 T+ q& s! c8 X: q7 D6 G! l  D
    13. s =
      $ y9 G8 C9 K6 {

    14. ! B1 N7 n% z* P3 A7 s5 f9 e  j
    15.      2000000  X- {/ N6 A. ]) z\" X' G

    16. & |* `/ ?! |! W
    17. Elapsed time is 18.325900 seconds.
    复制代码
    程序运行时内存比较稳定。$ Q+ \) {' x6 `& k
    ( P" B5 }# a# [/ F. ?5 j2 u
    --------
    ; A9 A, k# Z7 z6 x" W$ T3 B; V
    0 v, P9 G9 X. o8 x8 ~! jForcal代码:
    1. !using["math","sys"];4 w* O, _) j  ?. o) m- X8 `: d, k
    2. mvar:
    3. ; B3 Q7 U& l  W$ c5 Z! e( H- {7 v4 M/ P
    4. main(:a)=
    5. $ c\\" A  d  U4 ?4 A+ z; d4 r
    6. t0=clock(),8 A( T8 B2 U. [2 S- L- f) `& b
    7. s=0,
    8. ; U# I\\" e! F5 e! [0 d
    9. k=0, while{k<1000,4 R, [' A) Z: |6 j% B3 R& ?9 g
    10.   i=0, while{i<1000, a=linspace(2,2,1000), s=s+a.i, i++},  // 嗯,a.i 就是 a(i)
    11. 1 C4 J4 g' e8 k- C! ~# X0 e' P
    12.   k++
    13. 8 v% J( q0 c2 Z& l
    14. },* W1 ^( x3 `- y! ~6 [# g3 v% g
    15. s;
    16. 8 [: }, v6 e/ ~3 y- }
    17. [clock()-t0]/1000;
    结果:) u& z+ y! K) k7 J. c
    2000000./ \3 c! m: M6 l& A+ ^5 s( S1 h/ D. N
    40.766 秒
    / b$ Y1 B4 ?( ~2 K. a8 q) H6 Z& M$ G( _# \0 O
    程序运行时内存不稳定,时大时小。该程序导致Forcal垃圾收集器启动约10次,垃圾收集前内存消耗大,垃圾收集后内存小。' d" w5 N7 N- W) e" a6 H  \
    因垃圾收集器多次启动,故耗时较长。
    7 x  @1 i- n4 k5 F: O
      [1 F- U, R3 j; l3 o3 {------------/ J# B7 S' q6 H

    5 r, V& A- n1 l7 v以下将a=linspace(2,2,1000)放到了oo{  }函数中:
    1. !using["math","sys"];3 _4 N# E# W/ ^
    2. mvar:
    3. # {$ x! q, n6 J, d6 m3 I3 S; N
    4. main(:a)=2 a% G, u7 v  v. d' Y- T
    5. t0=clock(),% R/ o  ~9 ~& M5 \% _8 s
    6. s=0,
    7. . m( ]; j6 a3 T% p
    8. k=0, while{k<1000,
    9. + X- @+ T% O. N) {! l$ K
    10.   i=0, while{i<1000, oo{a=linspace(2,2,1000)}, s=s+a.i, i++},  // 嗯,a.i就是a(i)8 T1 R! \# Z3 k
    11.   k++0 c9 ~! _! V9 j\\" h7 q/ |4 ?% k5 ~/ |
    12. },
    13. 6 K* R6 Y( S; w3 h% n
    14. s;
    15. 7 p, p3 N# w* H# t
    16. [clock()-t0]/1000;
    结果:
    1 y+ `$ i% X% U$ B1 W# y9 |# f7 y2000000.4 S" j: z, `6 B( |/ @  N
    4.609 秒
    4 I6 W8 _2 Q) a7 D* }  f2 C" e& k+ |( Q* I' \8 H- y9 ?/ R7 }- {
    可以发现,Forcal耗时大大减少了,远小于matlab耗时,这要归功于oo{ }函数。0 g; ~9 `$ V3 E$ F
    在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 J; [: s! V6 m9 X  F# f# s太强大了 看不懂啊
    1 ]1 E3 @  y1 v( T/ A8 r
    函数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 q0 a& S
    函数linspace(2,2,1000)放到循环里,每循环一次就会产生一个垃圾对象(一维数组),主要对比Matlab和Forc ...

    + H, ~; q  D  B恩 我在研究研究,谢谢了
    回复

    使用道具 举报

    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-20 11:16 , Processed in 0.438971 second(s), 74 queries .

    回顶部