http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50924
Bug #: 50924 Summary: Attempt to allocate negative amount of memory. Possible integer overflow Classification: Unclassified Product: gcc Version: 4.4.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: f...@inducks.org When allocating a large array the progrem stops with: Fortran runtime error: Attempt to allocate negative amount of memory. Possible integer overflow Test program: PROGRAM MAIN DOUBLE PRECISION, ALLOCATABLE :: E(:,:,:) INTEGER :: N N=645 ALLOCATE(E(N,N,N)) DEALLOCATE(E) END PROGRAM MAIN With N=646: $ gfortran -fbacktrace -g test.f90 && ./a.out Fortran runtime error: Attempt to allocate negative amount of memory. Possible integer overflow Backtrace for this error: + /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xe2dbd6] With N=645, the program works fine and takes 68.5% of the memory, so there should be enough room for a 646^3 array (no other program is using a significant amount of memory). I believe the problem is that sizeof(double)=8 so the array size is: 8*(645^3) = 2 146 689 000 8*(646^3) = 2 156 689 088 and: 2^31 = 2 147 483 648 So my guess is that the total amount of memory needed for the array is saved in some integer, which overflows and become negative. If that's of any use: $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Celeron(R) CPU E3300 @ 2.50GHz stepping : 10 cpu MHz : 2493.807 cache size : 1024 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 4987.61 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Celeron(R) CPU E3300 @ 2.50GHz stepping : 10 cpu MHz : 2493.807 cache size : 1024 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 4987.44 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=10.04 DISTRIB_CODENAME=lucid DISTRIB_DESCRIPTION="Ubuntu 10.04.3 LTS" Thanks.