2017-05-08 21 views
3

這可能嗎?假設我想確定一個變量佔據多少字節,因爲我知道該維度,因此可以在進行計算之前採取適當的過程。經典的方式:如何確定內存中變量的大小而不創建它?

A = zeros(500, 500, 500); 
whos A; 

你可能會建議直接刪除whos命令後的變量,但如果MATLAB已經幾乎達到了最大的內存容量,這可能無法正常工作。有沒有一個優雅的方式來做到這一點?

回答

5

對於標準numeric types的矩陣,您只需要知道矩陣中的元素數和數據類型中的字節數。對於示例,你的矩陣將是默認值,即8個字節double類型的,所以你的總矩陣大小將是:

matrixSize = [500 500 500]; 
byteSize = prod(matrixSize)*8; 

可以從一個標量變量計算出對於給定的數據類型的字節大小這種類型的使用whos的:

temp = uint8(0);   % Sample uint8 variable 
varData = whos('temp'); % Get variable data from whos 
varBytes = varData.bytes; % Get number of bytes 

varBytes = 

    1      % uint8 takes 1 byte 

As mentioned by Sam,容器類,如cell arraysstructures使其計算總字節使用更復雜一點,因爲它們需要一些內存開銷。

+1

另外:單元陣列所用的內存是單元內容的內存加上每個單元112字節的開銷,並且結構佔用的內存是字段內容的內存以及每個字段224字節的開銷。 –

+0

謝謝你們兩位!這是一個很好的方式來做到這一點。 –

相關問題