2013-11-03 87 views
0

這是當Valgrind的崩潰和停止剖析我的應用程序我得到的消息:Valgrind的內存不足

==16317== 
    ==16317==  Valgrind's memory management: out of memory: 
    ==16317==  newSuperblock's request for 4194304 bytes failed. 
    ==16317==  3013349376 bytes have already been allocated. 
    ==16317==  Valgrind cannot continue. Sorry. 
    ==16317== 
    ==16317==  There are several possible reasons for this. 
    ==16317==  - You have some kind of memory limit in place. Look at the 
    ==16317==  output of 'ulimit -a'. Is there a limit on the size of 
    ==16317==  virtual memory or address space? 
    ==16317==  - You have run out of swap space. 
    ==16317==  - Valgrind has a bug. If you think this is the case or you are 
    ==16317==  not sure, please let us know and we'll try to fix it. 
    ==16317==  Please note that programs can take substantially more memory than 
    ==16317==  normal when running under Valgrind tools, eg. up to twice or 
    ==16317==  more, depending on the tool. On a 64-bit machine, Valgrind 
    ==16317==  should be able to make use of up 32GB memory. On a 32-bit 
    ==16317==  machine, Valgrind should be able to use all the memory available 
    ==16317==  to a single process, up to 4GB if that's how you have your 
    ==16317==  kernel configured. Most 32-bit Linux setups allow a maximum of 
    ==16317==  3GB per process. 
    ==16317== 
    ==16317==  Whatever the reason, Valgrind cannot continue. Sorry. 

我已經用巨大的交換文件的嘗試,但它並沒有變得更好。 崩潰發生在我的交換文件快滿了之前。 我正在使用Fedora 19. 有沒有人知道這件事?我想我在網上讀了一些關於單個進程可以分配的內存限制的問題。如果是這種情況,我可以在哪裏設置它至少給了我一個valgrind人的好選擇:P。

在此先感謝

+1

從標題來看,我會說你有一些內存泄漏。你應該運行它 - 廢話。 – fauxCoder

回答

0

「大多數32位Linux設置允許每個進程的最大3GB的。」

您已經分配了3013349376個字節,非常接近3GB。所以你可能有一個32位的操作系統,你只是用完了一個進程的內存(另外〜200兆可能是valgrind的開銷)