Matlab handle class 句柄大小
Matlab handle class handle size
我有一个句柄 class 和一个数组,我在其中存储了我生成的 class 对象的句柄的多个副本(有时单个句柄的多达 1000 个副本)。我假设对象本身的句柄会占用很少的内存。
在 post 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
谁显示对象的大小,包括 4 字节引用。您的对象本身将是 108 个字节,句柄再增加 4 个字节,但 108 个字节是共享的。你不能在 whos 中总结内存来获得分配的总内存。
看看y的大小,应该是numel(y)*4+108
我有一个句柄 class 和一个数组,我在其中存储了我生成的 class 对象的句柄的多个副本(有时单个句柄的多达 1000 个副本)。我假设对象本身的句柄会占用很少的内存。
在 post 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
谁显示对象的大小,包括 4 字节引用。您的对象本身将是 108 个字节,句柄再增加 4 个字节,但 108 个字节是共享的。你不能在 whos 中总结内存来获得分配的总内存。
看看y的大小,应该是numel(y)*4+108