On 06/24/2011 04:25 PM, John Reiser wrote:
>> When the program runs by itself, all the malloc calls are successful.
>> However when I run it with valgrind's memcheck or massif tools (v
>> 3.6.0), a malloc call fails (which is trying to allocate around 6.4 Gb).
> Which Linux distribution, which Linux kernel ("uname -a"), and which
> C runtime library ("ls -l /lib*/libc.so*") are you running?
> There are various policies (such as automatic huge pages in some kernels)
> and various algorithms (such as malloc implementations in glibc)
> which might matter.
>
Ubuntu Lucid:

Linux maya 2.6.32-31-generic #61-Ubuntu SMP Fri Apr 8 18:25:51 UTC 2011 
x86_64 GNU/Linux

libc:
lrwxrwxrwx 1 root root 14 2011-02-24 18:32 /lib/libc.so.6 -> libc-2.11.1.so

swapon -s:
Filename                Type        Size    Used    Priority
/dev/sda3                               partition    95999992    0    -1

I tried a similar test case like yours and it works ok. Unfortunately my 
program is extremely large and complicated. In fact I get other errors 
like "conditional jump depends on uninitialized value" but these errors 
exist in another part of the code entirely.

I modified the code to check after each malloc call. The valgrind output 
looks like this now:


==15101== Warning: set address range perms: large range [0x5b806040, 
0x35670e040) (undefined)
==15101== Warning: set address range perms: large range [0x40d709040, 
0x708611040) (undefined)
nzval = 0x40d709040
pde_alloc: sparse matrix nzcol alloc failed: Success
==15101== Warning: set address range perms: large range [0x5b806030, 
0x35670e050) (noaccess)
==15101== Warning: set address range perms: large range [0x40d709030, 
0x708611050) (noaccess)

with code snippet:

       w->nzval = malloc(PDE_MAT_SIZE1 * PDE_MAT_SIZE2 * sizeof(double));
       if (!w->nzval)
         {
           fprintf(stderr, "pde_alloc: sparse matrix nzval alloc failed: 
%s\n", strerror(errno));
           pde_free(w);
           return 0;
         }
       fprintf(stderr, "nzval = %p\n", w->nzval);

       w->nzcol = malloc(PDE_MAT_SIZE1 * PDE_MAT_SIZE2 * sizeof(int));
       if (!w->nzcol)
         {
           fprintf(stderr, "pde_alloc: sparse matrix nzcol alloc failed: 
%s\n", strerror(errno));
           pde_free(w);
           return 0;
         }



------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a 
definitive record of customers, application performance, security 
threats, fraudulent activity and more. Splunk takes this data and makes 
sense of it. Business sense. IT sense. Common sense.. 
http://p.sf.net/sfu/splunk-d2d-c1
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to