[Mono-dev] Allocating unmanaged memory
Robert Jordan
robertj at gmx.net
Thu Jan 4 07:47:02 EST 2007
Leszek Ciesielski wrote:
> Hi,
>
> I need to allocate unmanaged memory AND make sure it is filled with
> 0's. Is there some clever/fast way to do this? So far, I found only
> Marshal.WriteByte, which sets one byte at a time.
untested:
public static IntPtr Alloc (int bytes)
{
int p = (int) Environment.OSVersion.Platform;
if ((p == 4) || (p == 128)) {
// unix
return calloc (bytes, 1);
} else {
return GlobalAlloc (GMEM_ZEROINIT, bytes);
}
}
[DllImport("libc")]
static extern IntPtr calloc (int nmemb, int size);
const int GMEM_ZEROINIT = 0x40;
[DllImport("kernel32")]
static extern IntPtr GlobalAlloc (int flags, int bytes);
On both platforms the memory can be released with Marshal.FreeHGlobal.
Robert
More information about the Mono-devel-list
mailing list