【发布时间】:2018-03-14 23:05:13
【问题描述】:
在找到这个 m-code sn-p 的 mex 类比概念时我有点迷失:
a.one = linspace(1,100);
a.two = linspace(101,200);
a.three = linspace(201,300);
for it = 1:100
b(it).one = it;
b(it).two = it+100;
b(it).three = it+200;
end
运行上面的 m 代码会产生两个结构,每个结构都具有相同的内容:
>> a
a =
struct with fields:
one: [1×100 double]
two: [1×100 double]
three: [1×100 double]
>> b
b =
1×100 struct array with fields:
one
two
three
但内存消耗大不相同:
>> whos
Name Size Bytes Class Attributes
a 1x1 2928 struct
b 1x100 36192 struct
我正在学习 mex 函数、数据类型等的深度,但无法找出在 mex 函数中重新创建“a”和“b”并将它们返回到MATLAB 工作区。任何帮助将不胜感激!
【问题讨论】:
-
“运行上面的 m 代码会产生两个结构,每个结构都有 相同的 内容”。但他们不是。您刚刚说明了
struct数组的每个元素似乎都有自己的内存分配。干得好! -
它们是不同的。 a 是 1x1 结构,包含 3 个数组,b 是 1x100 结构,每个结构包含 3 个数组
-
是的,没错。我完全承认这一点,这实际上是我提出问题的根本基础。我的问题是如何从 mex 复制这种相似但根本不同的结构。有什么建议,或者只是讽刺@Argyll?
-
为了澄清这一点,它们在存储的数据量方面是相同的,但在内存占用方面却不同。用 Mathworks 自己的话来说,“即使 S1 和 S2 包含相同数量的数据 [...]”来自 mathworks.com/help/matlab/matlab_prog/…,请查找 S1 和 S2 的比较。我想您知道这一点,但不会费心提供在 mex 中重新创建“a”和“b”结构的解决方案。谢谢。
-
讽刺?我建议编辑您刚刚在您的问题中告诉我的内容,以使其更清楚。老实说,即便如此,我仍然不确定你在问什么。 matlab 管理内存的方式是专有的,很难确定。