This is the mail archive of the firstname.lastname@example.org
mailing list for the Cygwin project. See the Cygwin
home page for more information.
Re: malloc and free mixing in VC++ and cygwin
- To: "cygwin" <email@example.com>
- Subject: Re: malloc and free mixing in VC++ and cygwin
- From: "Jonathan Pryor" <firstname.lastname@example.org>
- Date: Thu, 29 Apr 1999 11:29:46 -0400
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).
* malloc/free between libraries (MSVC alloc, g++ free or
* malloc to allocate, Win32 API (GlobalFree, etc) to free.
I'd never actually considered this as a possibility...
* Win32 to allocate (GlobalAlloc, etc.), free() to free.
* 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.
From: Chris Faylor <email@example.com>
To: cygwin <firstname.lastname@example.org>
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:
>>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.
Want to unsubscribe from this list?
Send a message to email@example.com