我以前写代码常常写出

for n = 1 : xxx

a(n) = fcn(....)

end

后来到处偷师,学了到一定要先开内存,比如用zeros(), 比如换成 for n = xxx : -1 :1

Matlab 在使用内存的时候最有效率的方法是一次找到足够大的连续内存块,而for显然在有些情况下无法满足。

下面写了几个例子。

特别推荐的是

for n = len : -1 :1 的这种for的写法,即不需要zeros() 之类的先开内存,也可以达到预分配内存的效果,当然不知道

是不是某个版本改进之后的效果。

主要的问题来自于matlab的内存管理机制:

对于一个数组,matlab先在内存中找一块放得下的连续空间,如果这个数组一直增大到那个连续空间放不下了,

matlab会去找另外一个放得下的连续空间(好像记得在什么地方听到过是找一个原来内存2倍大的地方),这样就带了

两个问题:

1. 额外的操作,找内存 + 复制; 而且这种操作有可能是很多次。

2.  额外的空间,这个时候有2份copy在内存中。导致内存不足的常见原因之一

% Test Part I

clear;

clc;

len = 1000;

LOOP = 100;

tic;

for t = 1 : LOOP

for n = 1 : len

for m = 1:len

x(n,m) = n*m;

end

end

end

t1 = toc;

clear x;

tic;

x = zeros(len);

for t = 1 : LOOP

for n = 1 : len

for m = 1:len

x(n,m) = n * m;

end

end

end

t2 = toc;

clear x;

tic;

for t = 1 : LOOP

for n = len : -1 : 1

for m = len : -1 : 1

x(n,m) = n * m;

end

end

end

t3 = toc;

clear x;

msg = sprintf('Part I: Loop 1 is %5.1f \n\tLoop 2 is %5.1f\n\tLoop 3 is %5.1f',t1,t2,t3);

disp(msg);

% Test Part II

len = 1000;

tic;

for n = 1 : len  % Loop 1

for i = 1 : len

x(i+(n-1)*i) =  n*i;

end

end

t1 = toc;

clear x;

tic;

x = zeros(len*len,1);

for n = 1 : len % Loop 2

for i = len: -1 : 1

x(i+(n-1)*i) =  n*i;

end

end

t2 = toc;

clear x;

len = 1000;

tic;

for n = len : -1 : 1  % Loop 3

for i = len : -1 : 1

x(i+(n-1)*i) =  n*i;

end

end

t3 = toc;

clear x;

msg = sprintf('Part II: Loop 1 is %5.1f \n\tLoop 2 is %5.1f\n\tLoop 3 is %5.1f',t1,t2,t3);

disp(msg);

matlab malloc,[原创]Matlab 高性能代码编写(三)内存是要先分配再使用的相关推荐

  1. MATLAB离散卷积的实现_代码编写_实现两列数的卷积

    现有两列数: x=[4 5 6]; b=[1 2 3]; 自己编写代码计算其卷积:x[n]*b[n] 一.实验目的:实现 1.理解离散卷积的计算: 2.使用filter函数将数字信号进行滤波,可以将表 ...

  2. MATLAB离散卷积的实现_自己编写代码_实现两列数的卷积

    一.实验目的 1.了解熟悉MATLAB中conv.filter函数的使用: 2.回忆卷积,深入了解conv原理,从差分方程和矩阵两个角度重构conv函数. 二.实验原理 卷积是两个变量在某范围内相乘后 ...

  3. 编写高性能的C#代码(三)使用SPAN

    原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除. 作者介绍: 史蒂夫·戈登(Steve Gordon)是Microsoft MVP,Pl ...

  4. matlab输入输出gui,代码编写的 gui 实现基本的输入输出

    受math老大的gui教学视频启发,用代码编写了gui程序.实现基本的输入输出功能.希望大家批评指正! 代码如下: clear in_out=figure('name','输入输出联系','posit ...

  5. matlab充分利用性能,Matlab高性能编程——代码优化和并行计算

    Jeremy Lin  @HQU Update: 2014/4/29 Matlab代码优化 Matlab是一种高级计算机语言,同时也是一个用于算法开发,数据可视化,数据分析和数值计算的交互式工作环境. ...

  6. matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx

    Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  7. c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码

    检索   使用 MATLAB Function 模块集成 C 代码 从 Simulink 模型中调用 C 代码 您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 ...

  8. MATLAB教室人数统计开源代码(包含 GUI 注释 课题分析)

    MATLAB教室人数统计(免费开源代码) 本人参考了很多的资料最后总结整出来的,如果能够该博客对你的学习有所帮助的话,希望大家可以帮我点个赞,本人是抱着学习的态度进行分享,大家如果能在我的基础上进行二 ...

  9. 最小二乘法,简明公式整理,数学证明,matlab程序(自写代码、lsqcurvefit函数、fminsearch函数)

    目录 批处理最小二乘方法 递推最小二乘方法 带有遗忘因子的递推最小二乘方法 Matlab案例分析 自写代码 matlab之lsqcurvefit函数 matlab之fminsearch函数 附录1:递 ...

最新文章

  1. Nutch插件开发及发布流程
  2. 27岁华裔小伙一战成名!搞出美国新冠最准预测模型
  3. 设计模式:观察者模式--Observer
  4. 福布斯:2016年物联网预测和市场估算总结
  5. 运放使用中不稳定怎么办?
  6. 计算机网络技术实训应用层,计算机网络技术
  7. 一 ASP.NET Html 表单
  8. win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
  9. [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字
  10. python array函数_Python 中的range()函数与array()函数
  11. php查询字段前30个字符,php/json我的字段名被截断为30个字符。我能停下来吗?
  12. IOC操作Bean管理XML方式(外部属性文件)
  13. Tcpdump抓包命令使用
  14. 选择排序、冒泡排序、异或运算
  15. 简短介绍_简短的自我介绍
  16. hiho_100_八数码
  17. springAOP,面向切面编程详解,通俗易懂
  18. python-for x in range (注意要点、细节)
  19. flink-sql所有语法详解-1.13
  20. vue实现预览pdf组件(vue-pdf插件使用)

热门文章

  1. SSLOJ 1335.蛋糕切割
  2. Tomcat系列(5)——Tomcat配置详细部分
  3. Popush项目团队开发章程
  4. SQLAlchemy 嵌套事务的解决方案
  5. 使用JUnit测试预期异常
  6. 【干货】DTC模式如何引领消费品牌企业实现创新-罗兰贝格.pdf
  7. 【干货】2020十大消费新机遇.pdf(附下载链接)
  8. 阿里文娱搜索排序算法实践和思考(附交流视频和PPT下载链接)
  9. Python实战从入门到精通第十四讲——定义有默认参数的函数
  10. 算法“视”界杯上演十强争锋,大赛终极一战圆满落幕