我有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。
答案 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
执行此操作,相信这也适用于地图。
要自行实施,您需要对地图的内容进行递归,然后在struct
或cell
中的所有字段进行递归,以确定尺寸。