Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我的C mex编译文件内存不足(更具体地说,我对mxMalloc调用有时返回NULL )。通过快速计算,我估计我的文件mxMalloc要求mxMalloc约500 MB的内存(可能多达1 GB),并且我在64位Linux计算机上运行文件,而16 GB的内存几乎专门运行Matlab。但是, mxMalloc经常返回NULL 。
我猜可能有多种原因会导致这种情况发生(内存碎片等),但是无论如何,对于16 GB内存的机器来说,500 MB似乎并不是什么大问题。 我假设我对Matlab堆中的mxMalloc请求的调用是从内存中获取的,但是并不能100%地确定( mxMalloc Matlab处理了mxMalloc请求,而不是直接由OS处理)。那么,有没有办法增加我的mex文件的“堆”大小? 谢谢 回答: 您可以使用malloc (不是mxMalloc ),但是必须手动管理内存(例如,您必须调用free ;它不是mxFree那样的可选项)。您也可以尝试使用c ++和boost的共享/作用域指针进行编译。您的mexFunction签名将需要在其前面加上extern "C" 。 内存不足的原因之一可能是阵列太长。 mxArray必须是连续数据。所以mxMalloc荷兰国际集团他们和mxFree荷兰国际集团可能他们的分段存储空间。尽管std :: vector也必须是连续的,但std :: list不必一定是连续的。 像原始STL的rope类之类的东西也可以很好地实现。 更多&回答... |
![]() |
![]() |