Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 Matlab:避免在mex中分配内存

我试图使我的mex库避免所有内存分配,即使如此。
到目前为止,mex获得了输入,使用mxCreate...()创建了一些矩阵并返回了此输出。
但是现在我想修改此接口,以便mex本身不做任何分配。
我想到的是,mexFunction将作为输入矩阵来填充值,并将该矩阵作为输出返回。

这应该可行吗?

使我思考这是否是我需要做的所有事情的轻微警报是,左手参数以const的形式出现在mexFunction中,而右手参数为非const。返回输入矩阵作为输出,我需要删除此const。


回答:
有趣的是,前几天我只是在看这个。最好的信息,我发现线程这里这里也是这个

基本上,在Matlab世界中,这通常被认为是一件非常糟糕的事情……但是,与此同时,没有任何事情可以阻止您,因此您可以做到这一点-尝试一些简单的示例,您将看到所做的更改已得到传播。只需更改从prhs获得的数据即可(您无需返回任何内容-因为您更改了原始数据,因此原始数据将反映在工作空间中的变量中)。

但是,正如链接中指出的那样,由于Matlabs的写时复制语义,这可能会带来奇怪的后果。设置format debug可以在此方面获得很多直觉。如果执行a=b ,则将看到a和b具有不同的“结构地址”或标头,表示它们是不同的变量,但数据指针pr指向内存中的同一区域。通常,如果您在Matlab中更改y,则会写入时复制,并且在更改之前先复制数据区域,因此y之后有一个新的数据指针。当您更改mex中的内容时,这不会发生,因此,如果您更改y,x也会更改。

我认为这样做是可以的-如果您需要处理大型数据集,这是非常有用的,但是您需要注意任何奇异之处-尝试确保输入的数据不会在变量之间共享。 struct和cell数组使事情变得更加复杂,因此我将更倾向于避免对它们进行处理。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:17


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.