Matlab处理类句柄大小

时间:2015-01-29 12:03:31

标签: matlab memory-management handle

我有一个句柄类和一个数组,其中我存储了我生成的类对象的句柄的多个副本(有时多达1000个单个句柄的副本)。我假设对象本身的句柄会占用很少的内存。

在帖子http://es.mathworks.com/matlabcentral/newsreader/view_thread/255117中有人提到句柄将是4个字节。但是,如果我在对象句柄上执行whos,我会得到112个字节。这对我目前的申请来说太过分了。这是正常的吗?

那么如何降低内存使用率呢?我可以想象一个解决方案,我可以将句柄(带有container.map)映射到uint32数字(4个字节),然后使用该数字在我的句柄副本数组中表示它们。它有点脏,但因为每次我想从我的对象获取数据时我都需要通过映射。

有更好的想法吗? 谢谢!

根据要求提供一个例子:

classdef Test < handle
end

>> z = Test();
>> whos z
  Name      Size            Bytes  Class    Attributes
  z         1x1               112  Test  
>> y = [z z z z z z z z z]; %an array of copies of the handle

然而,这令我感到困惑:

>> y = [z z z];
>> whos y
  Name      Size            Bytes  Class    Attributes
  y         1x3               128  Test               

>> y = [z z z z];
>> whos y
  Name      Size            Bytes  Class    Attributes
  y         1x4               136  Test  

1 个答案:

答案 0 :(得分:2)

显示对象的大小,包括4个字节的引用。您的对象本身将是108个字节,并且句柄添加另外4个字节,但共享108个字节。你无法总结用于获得总分配内存的内存。

看看y的大小,应该是numel(y)* 4 + 108