/// <summary> /// Allocates a block of memory with the PAGE_EXECUTE permission. /// </summary> /// <param name="size">The size of the memory to allocate.</param> /// <returns>A pointer to the allocated block of memory.</returns> public static IntPtr AllocateExecutable(long size) { IntPtr block = SafeNativeMethods.VirtualAlloc(IntPtr.Zero, new UIntPtr((ulong)size), NativeConstants.MEM_COMMIT, NativeConstants.PAGE_EXECUTE_READWRITE); if (block == IntPtr.Zero) { throw new OutOfMemoryException("VirtualAlloc returned a null pointer"); } if (size > 0L) { MemoryPressureManager.AddMemoryPressure(size); } return(block); }
/// <summary> /// Allocates a block of memory at least as large as the amount requested. /// </summary> /// <param name="bytes">The number of bytes you want to allocate.</param> /// <returns>A pointer to a block of memory at least as large as bytes</returns> public static IntPtr AllocateLarge(ulong bytes) { IntPtr block = SafeNativeMethods.VirtualAlloc(IntPtr.Zero, new UIntPtr(bytes), NativeConstants.MEM_COMMIT, NativeConstants.PAGE_READWRITE); if (block == IntPtr.Zero) { throw new OutOfMemoryException("VirtualAlloc returned a null pointer"); } if (bytes > 0) { MemoryPressureManager.AddMemoryPressure((long)bytes); } return(block); }