Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

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


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

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 ]
James Tursa

Posts: 1,061
Registered: 10/25/07
Re: matlab/mex function doesn't free memory
Posted: Apr 10, 2009 4:24 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

Praetorian <ashish.sadanandan@gmail.com> wrote in message <a018942f-5682-44ca-82bf-ea96eb58c8dd@a23g2000vbl.googlegroups.com>...
>
> Thanks for coding up that example! So I went ahead and did things a
> little differently; instead of using CALLLIB from the command line I
> loaded the DLL using the Windows API LoadLibrary function from within
> mexmem. And what do you know, MATLAB garbage collects the memory in
> that case. The only other difference was that I created a Visual
> Studio project to compile my DLL instead of modifying mexopts.bat but
> I can't think of any project setting that would cause this change in
> behavior. Here's my modified mexmem.c
>
> (snip)
>
> I added the INMEM check because I was always under the impression that
> MATLAB didn't do any mex garbage collection until the mex file was
> cleared from memory. But these tests prove otherwise! Also, I tried
> commenting out the FreeLibrary call to see what would happen if the
> DLL remained in memory but that gave the same results.
>
> Any thoughts on why CALLLIB doesn't work the same way?
>
> Regards,
> Ashish.


Ashish,

I haven't had a chance to try out your example yet ... maybe this weekend. But I did modify some other dll code that I have that is a basic memory sharing example. Called it using Windows API functions from within a mex routine. The dll has functions for allocating memory, copying data to the memory, displaying the memory, and deallocating the memory. The dll works great using malloc and free, but when I switch to mxMalloc and mxFree the dll craps out with a seg fault. This doesn't always happen right away, but it always happens eventually. So I suspect that there is a fundamental restriction here that you can't use MATLAB API functions inside a shared library dll because it messes up the MATLAB memory manager in some way ... they are probably walking on each other. You apparently experienced seg faults as well when deallocating with one of your examples. So the garbage collection issue
is probably a moot point for shared library dll's since using any of the MATLAB API functions that allocate or deallocate memory will screw up the MATLAB memory manager and cause a seg fault.

James Tursa



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

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.