如何在不创建变量的情况下确定内存中变量的大小?

3

这是可能的吗?假设我想确定一个变量的占用字节数,已知其维度,以便在进行计算之前采取适当的措施。一种经典的方法:

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

你可能会建议在whos命令之后直接删除变量,但如果MATLAB已经接近最大内存容量,这样可能行不通。有没有更优雅的方法来解决这个问题?

1个回答

5
对于标准的数值类型矩阵,您只需要知道矩阵中元素的数量和数据类型中的字节数。对于您的示例,默认情况下,您的矩阵将是double类型,即8个字节,因此您的总矩阵大小将为:
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

正如Sam所提到的那样, 容器类如cell arraysstructures使得计算总字节使用量变得更加复杂,因为它们需要一些内存开销。


1
此外:单元数组所占用的内存是单元内容的内存加上每个单元112字节的开销,结构体所占用的内存是字段内容的内存加上每个字段224字节的开销。 - Sam Roberts
谢谢你们两个!这是一个不错的方法。 - Gregor Isack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接