如何确定内存中变量的大小而不创建它?

问题描述:

这可能吗?假设我想确定一个变量占据多少字节,因为我知道该维度,因此可以在进行计算之前采取适当的过程。经典的方式:如何确定内存中变量的大小而不创建它?

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

你可能会建议直接删除whos命令后的变量,但如果MATLAB已经几乎达到了最大的内存容量,这可能无法正常工作。有没有一个优雅的方式来做到这一点?

对于标准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

谢谢你们两位!这是一个很好的方式来做到这一点。 –