From: Brian D. <br...@de...> - 2008-04-30 16:53:46
|
Bob Rossi wrote: > To follow up on my own thread, I know that each DLL in windows can have > it's own heap. I also know that you can't new an object in one, and > delete it in another, unless you use the /MD switch with cl. > > So, how does this effect mingw's gcc? Is there a similar gcc flag or do > the rules not apply? cl /MD literally means "use MSVCRT.DLL" instead of statically linking the runtime into the executable. The problem you are referring to is specific to MSVC because there you can choose between a vast combination of runtimes (static or dynamic; single or multithreaded; debug or non-debug) and so you run into problems if you try to use a library that was built with e.g. the static singlethreaded runtime linked to a main program that was built with the dynamic MT runtime. But MinGW supports only[1] one option: dynamic MSVCRT.DLL, so this is pretty much irrelevant. It's not like we can distribute Microsoft's static libraries. Regarding heaps, gcc has no knowledge of how the underlying platform implements memory management; all it needs to know is that there is a malloc() in the libc on which it can base 'operator new', that's it. And since malloc() is implemented by MSVCRT.DLL, this means that all calls go through one instance. [1] Well I guess technically there is also support for CRTDLL.DLL but *nobody* uses that as it is way ancient and I would guess extremely broken. Brian |