MATLAB內存變量的管理

1.在創建和修改數組時利用連續內存保存相關的變量

1. 爲數組賦值:利用連續的內存分配。但是數組類型和維數作爲數組的頭信息保存在其他的地方。(兩者沒有存放在同一連續的內存區域)

2. 刪除數組中的元素:先移除數組元素,後壓縮原來分配給數組的內存空間。

3. 維數組增加元素:觀察數組所在的連續區域中是否可以增加新元素。

· 如果可以容納新增加的數組元素則僅需要擴大數組的分配內存,然後將新增加的數組元素添加到內存中。

· 如果原有數組存放的連續塊不夠大,則需要在Matlab內存中搜索新的能夠同時容納原有數組和新增數組元素的連續內存塊。

如果能夠找到足夠連續的內存,則可以將原有數組元素拷貝到新分配的內存中,然後將新增加的數組元素添加新的內存中,然後釋放原來的內存。(在此期間,內存中會有原數組數據的兩份拷貝,增加了out of memory的風險)
如果沒有搜索到連續的內存空間,則有可能產生out of memory的錯誤。

2.在進行數組拷貝時內存的分配

1. 函數形參實參化的時候,只有在當傳遞參數的數據內容發生變化的時候纔會爲參數分配內存。

2. 當一個數組賦值給另一個數組變量時,不會爲新變量分配內存,而是僅僅將新變量的指針指向原變量,也就是說新變量僅是原來數組變量的引用(別名)。ps:如果新變量中元素值有改變時,Matlab就會爲其新變量分配新的內存。

3.數組頭

· whos函數只能用來查看變量所佔用的存儲空間,而不能顯示數組頭信息所佔用的空間

由於數組頭佔據內存,並且其存儲空間與數組數據並不連續。結構體和細胞數組不僅需要存儲它們自己的數組頭信息,還會爲這些數組中的每個字段或每個細胞元素創建頭信息,因此結構體和細胞數組消耗的內存與其創建方式有關。

4.不同數據結構的內存

1. 各類型佔用空間:
有符號/無符號整型:
8-bit——1
16-bit——2
32-bit——3
64-bit——4

浮點數:
單精度——4
雙精度——8

複數:
複數的實部和虛部在內存中是分開存放的,當在程序中修改複數的實部或虛部時,會在修改數據的同時複製複數的實部和虛部。

ps:在Matlab中,當數組的元素絕大部分爲0時,Matlab一般默認採用稀疏矩陣進行存貯以節省空間。

5.Matlab內存計算方法

不同的系統數據的內存空間不同。
例如,
1. 細胞數組佔用的內存空間的計算方法爲:
(header_size x number_of_cells) + data
(對於64位系統,header_size爲112。)

A = {1 2 3}——112×3+8×3
A = {[1 2 3]}——112×1+8×3
A = {{1 2 3}}——112×4+8×3

2. 64bit系統中結構體佔用空間的計算方法:
fields x ((112 x array elements) + 64) + data
(32bit系統中將112改爲60)

例子:已知一個結構數組A,查看其頭信息。

>> A={[ ]}
>> whos A
  Name      Size            Bytes  Class    Attributes
  A         1x1               112  cell               
發佈了19 篇原創文章 · 獲贊 3 · 訪問量 1421
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章