matlab malloc,[原创]Matlab 高性能代码编写(三)内存是要先分配再使用的
我以前写代码常常写出
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 高性能代码编写(三)内存是要先分配再使用的相关推荐
- MATLAB离散卷积的实现_代码编写_实现两列数的卷积
现有两列数: x=[4 5 6]; b=[1 2 3]; 自己编写代码计算其卷积:x[n]*b[n] 一.实验目的:实现 1.理解离散卷积的计算: 2.使用filter函数将数字信号进行滤波,可以将表 ...
- MATLAB离散卷积的实现_自己编写代码_实现两列数的卷积
一.实验目的 1.了解熟悉MATLAB中conv.filter函数的使用: 2.回忆卷积,深入了解conv原理,从差分方程和矩阵两个角度重构conv函数. 二.实验原理 卷积是两个变量在某范围内相乘后 ...
- 编写高性能的C#代码(三)使用SPAN
原文来自互联网,由长沙DotNET技术社区编译.如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除. 作者介绍: 史蒂夫·戈登(Steve Gordon)是Microsoft MVP,Pl ...
- matlab输入输出gui,代码编写的 gui 实现基本的输入输出
受math老大的gui教学视频启发,用代码编写了gui程序.实现基本的输入输出功能.希望大家批评指正! 代码如下: clear in_out=figure('name','输入输出联系','posit ...
- matlab充分利用性能,Matlab高性能编程——代码优化和并行计算
Jeremy Lin @HQU Update: 2014/4/29 Matlab代码优化 Matlab是一种高级计算机语言,同时也是一个用于算法开发,数据可视化,数据分析和数值计算的交互式工作环境. ...
- matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx
Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...
- c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码
检索 使用 MATLAB Function 模块集成 C 代码 从 Simulink 模型中调用 C 代码 您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 ...
- MATLAB教室人数统计开源代码(包含 GUI 注释 课题分析)
MATLAB教室人数统计(免费开源代码) 本人参考了很多的资料最后总结整出来的,如果能够该博客对你的学习有所帮助的话,希望大家可以帮我点个赞,本人是抱着学习的态度进行分享,大家如果能在我的基础上进行二 ...
- 最小二乘法,简明公式整理,数学证明,matlab程序(自写代码、lsqcurvefit函数、fminsearch函数)
目录 批处理最小二乘方法 递推最小二乘方法 带有遗忘因子的递推最小二乘方法 Matlab案例分析 自写代码 matlab之lsqcurvefit函数 matlab之fminsearch函数 附录1:递 ...
最新文章
- Nutch插件开发及发布流程
- 27岁华裔小伙一战成名!搞出美国新冠最准预测模型
- 设计模式:观察者模式--Observer
- 福布斯:2016年物联网预测和市场估算总结
- 运放使用中不稳定怎么办?
- 计算机网络技术实训应用层,计算机网络技术
- 一 ASP.NET Html 表单
- win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
- [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字
- python array函数_Python 中的range()函数与array()函数
- php查询字段前30个字符,php/json我的字段名被截断为30个字符。我能停下来吗?
- IOC操作Bean管理XML方式(外部属性文件)
- Tcpdump抓包命令使用
- 选择排序、冒泡排序、异或运算
- 简短介绍_简短的自我介绍
- hiho_100_八数码
- springAOP,面向切面编程详解,通俗易懂
- python-for x in range (注意要点、细节)
- flink-sql所有语法详解-1.13
- vue实现预览pdf组件(vue-pdf插件使用)