MATLAB中的地图中有多少字节?

时间:2013-06-03 17:59:15

标签: matlab memory map

我有map名为res_Map,其中包含一组不同大小的数组。我想找到用于存储res_Map的总内存。

如下所示,看起来好像res_Map几乎不占用任何内存,而res_Map中的各个元素都可以。

res_1 = res_Map(1);
>> whos
  Name              Size             Bytes  Class             Attributes

  res_1           118x100            94400  double                      
  res_Map          11x1                112  containers.Map

有谁知道如何找到用于存储res_Map的实际内存?我在documentation

中找不到任何相关信息

2 个答案:

答案 0 :(得分:3)

containers.Map对象是一个与任何其他对象一样的Matlab对象。在引擎盖下,这些实现为具有一些额外访问控制和功能映射的Matlab结构。

您可以使用struct命令强制Matlab向您显示原始结构。这会引发警告,因为通常不建议这样做。但是,班级的结构视图显示了完整的内容,并准确地反映在whos电话中。

下面是一些示例代码:

%Initialize map and add some content
res_Map = containers.Map;
for ix = 1:1000
    res_Map(sprintf('%05d',ix)) = ix;
end

%Look at the memory used by the map
disp('Raw who:  always 112 Bytes for Map')
whos('res_Map')

%Force the map into a structure, and look at the contained memory
mapContents = struct(res_Map);
disp('Look at the size of the map contents, reflect true size')
whos('res_Map','mapContents')


%Add additional contents and check again.
for ix = 1001:2000
    res_Map(sprintf('%05d',ix)) = ix;
end
mapContents = struct(res_Map);
disp('Look at the size of the map contents, reflect true size')
whos('res_Map','mapContents')

上述脚本的结果(删除警告消息后)如下所示:

Raw who:  always 112 Bytes for Map
Name            Size            Bytes  Class             Attributes
res_Map      1000x1               112  containers.Map

Look at the size of the map contents, reflect true size
Name                Size             Bytes  Class             Attributes
mapContents         1x1             243621  struct
res_Map          1000x1                112  containers.Map


Look at the size of the map contents, reflect true size
Name                Size             Bytes  Class             Attributes    
mapContents         1x1             485621  struct
res_Map          2000x1                112  containers.Map

答案 1 :(得分:1)

有一个脚本可以为matlab central处的任何struct执行此操作,相信这也适用于地图。

要自行实施,您需要对地图的内容进行递归,然后在structcell中的所有字段进行递归,以确定尺寸。