[Mono-list] Problem with big arrays

Yury Serdyuk Yury at serdyuk.botik.ru
Mon Aug 3 08:15:15 EDT 2009


Hi !

I have successfully configured and built Mono 2.4.2.3
with enabling big arrays.
Then I have tried a simple program like

using System;

public class MemoryTest {

 public static void Main ( String[] args )   {

 UInt64  n = (UInt64) ( Math.Pow ( 2, Convert.ToInt32 ( args [ 0 ] ) ) );

 Console.WriteLine ( "Number of (long) elements = " + n );
 Console.WriteLine ( "Total memory to use = " + ( n * sizeof ( long ) ) );

 long[] ar = new long [ n ];

 Console.WriteLine ( "Memory allocation done ..." );
 Console.WriteLine ( "Array length = " + ar.Length.ToString() );

 long size = Convert.ToInt64 ( ar.Length );

 Console.WriteLine ( "size = " + size );

 for ( long i = 0; i < size; i++ )
  ar [ i ] = 0;

 }

}

on the machine with 16 GB memory:

> $ cat /proc/meminfo
> MemTotal:     16441536 kB
> MemFree:      15773996 kB
> Buffers:           576 kB
> Cached:         179904 kB
> SwapCached:     207316 kB
> Active:          85280 kB
> Inactive:       310584 kB
> SwapTotal:    78150736 kB
> SwapFree:     77942284 kB

> ]$ uname -a
> Linux n3147.icyb 2.6.22.18-node3-lustre1.6.6 #3 SMP Wed Nov 12 
> 15:09:34 EET 2008 x86_64 x86_64 x86_64 GNU/Linux


For input  like
 >$ mono MemoryTest.exe 28

i.e., for 2 GB array it works fine:

> $ mono MemoryTest.exe 28
> Number of (long) elements = 268435456
> Total memory to use = 2147483648
> Memory allocation done ...
> Array length = 268435456
> size = 268435456

but for 4Gb array I got SIGSEGV:

> ]$ mono MemoryTest.exe 29
> Number of (long) elements = 536870912
> Total memory to use = 4294967296
> Memory allocation done ...
> Array length = 536870912
> size = 536870912
> Stacktrace:
>
>
> Native stacktrace:
>
>         mono [0x47e7a0]
>         mono [0x4adb7d]
>         /lib64/libpthread.so.0 [0x2b641fec6e60]
>         mono [0x4bf5d8]
>         mono(mono_g_hash_table_lookup+0x3a) [0x56d94a]
>         mono(mono_type_get_object+0xa2) [0x4bb192]
>         mono(mono_class_vtable+0x4dc) [0x4ca27c]
>         mono(mono_array_new+0x31) [0x4ce131]
>         mono [0x47c79f]
>         mono [0x47da9f]
>         mono [0x47d7e3]
>         mono [0x4adbf8]
>         [0x400104cc]
>
> Debug info from gdb:
>
>
> =================================================================
> Got a SIGSEGV while executing native code. This usually indicates
> a fatal error in the mono runtime or one of the native libraries
> used by your application.
> =================================================================
>
> Aborted

Is it a Mono bug or there are some special rules to deal with big arrays ?

Thanks.

Yury.



More information about the Mono-list mailing list