2011-12-27 11 views

risposta

12

Il limite è arbitrario e può essere modificato mediante la ricompilazione di valgrind.

Valgrind tiene traccia della memoria utilizzando un array sparse a 2 livelli. 16 bit dell'indirizzo vengono utilizzati per indicizzare in una tabella 65536-entry contenente un puntatore a una mappa di secondo livello, che traccia un intervallo dello spazio di indirizzamento (normalmente 2¹⁶ byte = 64 KB per i processi a 32 bit, 2¹⁹ byte = 512 KB per Processi a 64 bit). Quindi la quantità totale di memoria che può essere tracciata da questo array sparse a 2 livelli è 65536 × questa dimensione del blocco. Modificando il codice, la dimensione di questi blocchi può essere aumentata a una potenza maggiore di 2, al costo di utilizzare più memoria per tenere traccia dei pezzi più parziali.

In this message sulle valgrind-users mailing list, Julian Seward spiega come aumentare il limite da 32 GB a 128 GB:

  • in memcheck/mc_main.c cambiamento N_PRIMARY_BITS19-21

  • cambiamento le affermazioni alla fine del memcheck/mc_main.c di conseguenza:

    • MAX_PRIMARY_ADDRESS → 4 * (valore esistente + 1) - 1
    • per le MASK(1/2/4/8) asserzioni, azzerare più a destra due '1' bit nel blocco dei principali 1 bit, ad esempio MASK(8)0xFFFFFFE000000007ULL Credo

  • in coregrind/m_aspacemgr/aspacemgr-linux.c cambiamento aspacem_maxAddr da (Addr)0x800000000 - 1 a (Addr)0x2000000000ULL - 1.


Aggiornamento: La quantità massima di memoria Valgrind può utilizzare è aumentata nelle versioni più recenti:

  • 32 GB prima Valgrind 3,9
  • 64 GB Valgrind 3.9 fino a 3.12
  • 128 GB in Valgrind 3.13
+0

Ottima risposta, grazie – piotr

Problemi correlati