The Math Forum

Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Math Forum » Discussions » Software » comp.soft-sys.matlab

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: matlab/mex function doesn't free memory
Replies: 22   Last Post: Dec 10, 2012 1:49 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]

Posts: 4
Registered: 12/4/12
Re: matlab/mex function doesn't free memory
Posted: Dec 4, 2012 10:34 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

"Ronan " <> wrote in message <gmc94h$rl0$>...
> Praetorian <> wrote in message <>...
> > On Dec 14, 2:35=A0pm, Rune Allnor <> wrote:
> > > On 14 Des, 19:09, "Alex Berkovich" <alex...@tx.technion> wrote:
> > >

> > > > Hello all,
> > >
> > > > I'm running a mex function that calls for c code (compiled in the same =
> > file as the mex function itself).
> > > > when a simulation is done, it seems matlab doesn't release the memory i=
> > t uses since i see a growing amount of memory being used by matlab (via tas=
> > k manager).

> > >
> > > > it reaches the limit of my computer and then either crashes or simply c=
> > ontinues to run forever.
> > >
> > > > any suggestion on how to solve this problem is very appriciated.
> > >
> > > Any data structures you allocate with malloc-type functions
> > > (or with new in C++) should be freed by the appropriate
> > > corresponding calls to free or delete before your MEX function
> > > returns.
> > >
> > > As for mxCreateXXXX, only use them for whatever you intend to
> > > return back to the matlab workspace. I've never understood how
> > > the matlab memory managment system works (it seems to be based
> > > on some Java-type garbage collector) and I've always ended up
> > > with segmentation faults when I used mxFree on local variables
> > > inside the MEX function.
> > >
> > > Rune

> >
> > If you're using mxFree on variables created using mxCreate* functions
> > it'll always result in a memory leak. mxFree will only free the
> > mxArray header and not the data pointed to by the header. Use
> > mxDestroyArray to free variables allocated using mxCreate* and mxFree
> > for those allocated using mxCalloc, mxMalloc and mxRealloc. I only use
> > the MEX API functions to manage memory in C mex functions and it works
> > just fine.
> >
> > However, in case of C++ files it's better to use new except for
> > mxArray variables as you mentioned, and then free these using delete
> > in the class destructor. The MEX API does do it's own garbage
> > collection whenever MATLAB terminates a MEX file (because of a call to
> > mexErrMsgIdAndTxt for instance) before the mexFunction stack is
> > unwound. In this case trying to free memory using mxDestroyArray or
> > mxFree in the destructor causes a segv (since the memory has already
> > been freed by the garbage collector).

> I have a question close to that one..
> You said that "The MEX API does do it's own garbage collection whenever MATLAB terminates a MEX file", fine, but what about a function called in a shared library (via calllib) that return a mxArray* and thus, alloc via mxCreate functions ? Is this mxArray destoyed in C++ workspace ?
> Thanks..

Hi Ronan,
Currently I meet exactly the same problem. I wrote a function in C which returns mxArray* to Matlab, and this function is called in a shared library as well, and it will be called continuously. To free memory which occupied by return mxArray I wrote a function ( using mxDestroyArray), however, Matlab crashed, and seems it cannot find the location of returned mxArray. Is that becaues Matlab has it own garbage collection and after every call of function, it frees the memory occupied by returned mxArray?
Have you figured this issue out? I will appreciate a lot if you can give me any hint:)

Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2018. All Rights Reserved.