注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

极夜.潜的博客

 
 
 

日志

 
 

Matlab 的内存分配机制  

2011-04-23 14:19:50|  分类: Matlab |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、创建和修改数组——基本思想是保持内存的连续性
(1)当为数组赋值时,Matlab在内存中分配连续的虚拟块,在另一个地方,将数组的类型和维数等保存为头信息。
(2)当向数组增加新元素时,如果原来位置的连续内存区域可以容纳新增加的数据,则扩大分配的内存,然后增加元素;如果连续块不够大,需要先重新分配能够容纳原有数据和新增数据的连续内存块,再将原有数据拷贝到新分配的内存中(在此期间,内存中会有原来数据的两份拷贝,增加了out of memory的风险),并添加新的元素到新的块中,然后释放原来的内存。
(3)当删除数组元素时,先移除元素,再压缩原来分配的空间。

2、数组的拷贝

(1)当将一个数组赋值给另一个变量时,不会为新变量分配内存,新变量只是到原来数组的引用,直到新变量中元素值改变时,才会为其分配内存。
(2)通过参数传递给函数的数据,当数据内容发生改变时才会分配内存,函数内部新的数据通过返回值传递给调用该函数的函数。

3、数组头

(1)由于数组头占据存储空间(虽然不多),数据存放在几个大数组中要由于存放在多个小数组中。
(2)对结构体和元胞(cell)数组,Matlab不仅为他们创建头信息,还为结构体的每个字段和元胞数组的每个元素创建头信息,因此结构题和元胞数组消耗的内存与其创建方式有关。
(3)whos函数只能查看数据占用的存储空间,不会显示头信息占用的空间。

4、数据结构与内存

(1)8-bit、16-bit、32-bit、64-bit的有符号整型或无符号整型分别占用1、2、4、8字节空间,单精度、双精度浮点数分别占用4、8字节空间。
(2)复数的实部和虚部分别占用存贮空间,当修改实部或虚部时,会同时复制实部和虚部。
(3)当数组的元素绝大部分为0时,用稀疏矩阵存贮以节省空间。

5、内存占用计算

(1)元胞数组占用的空间计算方法为:(header_size x number_of_cells) + data,对于64位系统,header_size为112,查看header_size的方法: A = {[]}, whos A。A = {1 2 3}, A = {[1 2 3]}, A = {{1 2 3}}占用的字节数分别为:112×3+8×3,112×1+8×3,112×4+8×3。
(2)64bit系统中结构体占用空间的计算方法:fields x ((112 x array elements) + 64) + data (32bit系统中将112改为60)。

  评论这张
 
阅读(915)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018