Praetorian <email@example.com> wrote in message <firstname.lastname@example.org>... > > 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.
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.