Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab句柄类句柄大小_Matlab_Memory Management_Handle - Fatal编程技术网

Matlab句柄类句柄大小

Matlab句柄类句柄大小,matlab,memory-management,handle,Matlab,Memory Management,Handle,我有一个句柄类和一个数组,其中存储了我生成的类对象句柄的多个副本(有时一个句柄最多有1000个副本)。我假设对象本身的句柄将使用很少的内存 在一篇帖子中,有人提到句柄将是4字节。但是,如果我在对象句柄上执行whos,我会得到112个字节。这对我目前的申请来说太多了。这正常吗 那么如何降低内存使用率呢?我可以想象一个解决方案,其中我可以将句柄(使用container.map)映射到uint32数字(4字节),然后使用该数字在句柄副本数组中表示它们。不过这有点脏,因为每次我想从我的对象获取数据时,我

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

在一篇帖子中,有人提到句柄将是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

Whos显示对象的大小,包括4字节引用。您的对象本身将是108个字节,句柄将再添加4个字节,但108个字节是共享的。您不能将whos中的内存相加以获得分配的总内存


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

好问题。我们可以有一些小的自包含的例子来帮助我们回答您的问题吗?您使用的是哪个matlab版本?对于ML2013a 32位,基类为56字节,句柄为4字节。在您的例子中,句柄似乎是8字节,基类是108字节。*基类是104字节,而不是108I有Matlab R2013a。奇怪的也许Linux版本(我运行的)不同?啊,是的,看起来你是对的,只是句柄似乎是8字节。所以112-8=104。4*8+104=136,就像我的上一个例子一样。那么你是说句柄本身是8字节。奇怪的是,数组的whos包含104个字节。如果我创建第二个名为v的对象并将其添加到数组中会怎么样?我会有104+104+numel(y)*8吗?
>> 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