Mail Archives: cygwin/1999/04/29/11:31:52
I wasn't arguing that someone should call `malloc()', and then
use `GlobalFree()' to free the memory -- that's definately
a recipe for disaster, for precisely the reasons you specify.
I was stating that if you *don't* use malloc/free, and instead
go straight to the Win32 api (like you argue), that this should
work in mixed-library environments.
So, to be explicit:
* malloc/free within a library (only MSVC or g++; it would
likely need to be the same version of the library as well).
-- Good.
* malloc/free between libraries (MSVC alloc, g++ free or
vice-versa).
-- Bad.
* malloc to allocate, Win32 API (GlobalFree, etc) to free.
-- Bad.
I'd never actually considered this as a possibility...
* Win32 to allocate (GlobalAlloc, etc.), free() to free.
-- Bad.
Ditto.
* Win32 to allocate (GlobalAlloc) and Free (GlobalFree).
-- Good, as long as the api's match. (e.g.
GlobalAlloc --> GlobalFree, LocalAlloc --> LocalFree, etc.)
This should work, as the OS is responsible for allocation
in these functions, not another library (such as the C Run-time).
This should cover most bases.
- Jon
-----Original Message-----
From: Chris Faylor <cgf AT cygnus DOT com>
To: cygwin <cygwin AT sourceware DOT cygnus DOT com>
Date: Thursday, April 29, 1999 10:57 AM
Subject: Re: malloc and free mixing in VC++ and cygwin
>On Thu, Apr 29, 1999 at 08:26:48AM -0400, Jonathan Pryor wrote:
>>Maybe. :)
>>
>>More precisly, can `malloc' be used to allocate memory in cygwin
>>and `free' be used in VC to free the cygwin-allocated memory?
>>No -- they use different memory schemes.
>>
>>However, that doesn't mean that you can't have one environment
>>allocate memory, and have the other free it -- you just can't
>>use the C runtime functions.
>>
>>The Win32 functions CoTaskMemAlloc() and CoTaskMemFree() can
>>be used to allocate/free memory between 2 otherwise incompatible
>>memory schemes. I suspect that most of the other Win32 memory
>>functions (GlobalAlloc/GlobalFree, etc.) could also be used
>>to do this as well.
>
>You could use these routines to free the memory but you'd end
>up with a severely corrupted heap as far as cygwin is concerned.
>Cygwin's free() command does more than (potentially) return memory
>to the system. In fact, it usually doesn't even return memory to
>the system. It also keeps a list of all allocated memory for reuse
>by other malloc calls. This is a pretty standard way of doing things.
>
>I'd suggest just using straight Windows routines for doing memory
>allocation and deallocation if you have this requirement.
>
>-chris
--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com
- Raw text -