Bug 34382

Summary: Marshal.AllocHGlobal out of memory exception with 64-bit ptr
Product: [Mono] Runtime Reporter: Paolo <paolo.regondi>
Component: InteropAssignee: Bugzilla <bugzilla>
Status: RESOLVED FIXED    
Severity: normal CC: mono-bugs+mono, mono-bugs+runtime, vargaz
Priority: ---    
Version: 4.0.0   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Tags: Is this bug a regression?: ---
Last known good build:

Description Paolo 2015-09-29 05:27:07 UTC
I am trying to allocate unmanaged memory using Marshal.AllocHGlobal

When the size is greater than int.MaxValue (~2GB) I get this error message:
[ERROR] FATAL UNHANDLED EXCEPTION: System.OutOfMemoryException: Out of memory
 at (wrapper managed-to-native) System.Runtime.InteropServices.Marshal:AllocHGlobal (intptr)

This error occurs with mono Stable 4.0.4 and Alpha 4.2.1 on Ubuntu Server 14.04 in a virtual machine. Both the mono versions are using the 64-bit architecture. The code is compiled with VS2013 on a windows server 2012R2 machine and I made sure that the code was compiled in 64-bit checking that IntPtr.Size == 8.
Comment 1 Zoltan Varga 2015-10-06 11:09:13 UTC
On unix, AllocHGlobal uses the same allocator as malloc() does, and it looks like that can't allocate more than a certain amount of memory.
Comment 2 Paolo 2015-10-06 13:21:15 UTC
I did this test: on the same machine I used malloc() to allocate 30GB and it worked. I compiled the code using gcc.
Is it possible that AllocHGlobal uses a 32-bit version of malloc()?
Comment 3 Zoltan Varga 2015-10-06 13:41:54 UTC
Fixed by mono master 60cab7008ba24d189054d52bd39c8c9ee411e9db.