C 如何在不初始化mex函数的情况下分配其输出?

C 如何在不初始化mex函数的情况下分配其输出?,c,matlab,mex,C,Matlab,Mex,官方示例的作用如下: //allocates memory for the output and initializes the mxn array to 0. plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); //gets pointer to the output double *C = mxGetPr(plhs[0]); //function that writes to the output some_function(C); 有没有办

官方示例的作用如下:

//allocates memory for the output and initializes the mxn array to 0.
plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); 

//gets pointer to the output
double *C = mxGetPr(plhs[0]); 

//function that writes to the output
some_function(C);

有没有办法在不将plhs[0]初始化为0的情况下执行上述操作?由于数组将由
某些函数写入,因此不需要初始化

我没有看到
mxCreateUninitDoubleMatrix
,但您确定这实际上是性能问题吗?它可能只是在内部调用
mxCalloc
,这可能会调用
calloc
,这通常与
malloc
一样快,因为操作系统为此保留了一个零初始化内存池。基本上,除非您已经对代码进行了基准测试并发现了一个问题,否则这听起来像是过早的优化……谢谢,我不确定这是一个性能问题,但我担心由于初始化而导致的性能问题,因为我正在处理非常大的矩阵(高达17000x17000双复杂度)。你认为在这种情况下这还是个问题吗?另外,如果你把你的评论作为答案发布,我很乐意接受。试试看,但它可能不会太受欢迎,特别是如果你不经常加载的话。如果您经常加载,您可能应该寻找一种方法来映射数据。对于这么大的东西,我认为大多数
calloc
实现只会使用
mmap
MAP\u ANONYMOUS
,这在分配方面应该非常快;在您开始使用之前,它甚至不会清除内存,此时您将以任何方式写入它,这样它就不必像未初始化时那样在CPU和RAM之间移动,而且移动数据的速度较慢。您可以使用以下函数:或