Better is a relative term. If "better" == "safer", then new byte[requiredSize] is better. If "better" == "faster", then you'll get better performance by P/Invoking HeapAlloc or similar. The problem with this approach is that the memory is unmanaged by the CLR so it can't track it. You could marshal it to an IntPtr and use that in managed code, but the buffer is still allocated on the unmanaged heap (or stack if you used something like _alloca). You'll have to free it explicitly. This is where wrapping such functions in a class following the disposable pattern is handle, and .NET 2.0 will introduce the SafeHandle for just such a purpose. You can either define your own now, or take a look at the GCHandle and HandleRef structs under System.Runtime.InteropServices which may be helpful depending on how you're using the memory (especially if you need to marshal managed types to native memory). There is yet another way, though. Read about C#'s stackalloc operator keyword. This, of course, will alloc memory on the heap and give you an unsafe (i.e., has access to direct memory and is not GC'd) pointer. HTH This posting is provided "AS IS" with no warranties, and confers no rights. Software Design Engineer Developer Division Sustained Engineering Microsoft [My Articles] [My Blog]