2011-12-27 12 views

Respuesta

12

El límite es arbitrario y se puede cambiar compilando valgrind.

Valgrind realiza un seguimiento de la memoria utilizando una matriz dispersa de 2 niveles. 16 bits de la dirección se usan para indexar en una tabla de entrada 65536 que contiene un puntero a un mapa de segundo nivel, que rastrea un rango del espacio de direcciones (normalmente 2¹⁶ bytes = 64KB para procesos de 32 bits, 2¹⁹ bytes = 512KB para Procesos de 64 bits). Por lo tanto, la cantidad total de memoria que puede rastrearse mediante esta matriz dispersa de 2 niveles es 65536 × este tamaño de fragmento. Al modificar el código, el tamaño de estos trozos se puede aumentar a una potencia mayor de 2, a costa de usar más memoria para rastrear la mayoría de los trozos parciales.

En this message en los valgrind lista de distribución, Julian Seward explica cómo aumentar el límite de 32 GB a 128 GB:

  • en memcheck/mc_main.c cambio N_PRIMARY_BITS de 19 a 21

  • cambio las aserciones al final de memcheck/mc_main.c en consecuencia:

    • MAX_PRIMARY_ADDRESS → 4 * (valor existente + 1) - 1
    • para los MASK(1/2/4/8) afirmaciones, puesta a cero de los dos más a la derecha '1' bits en el bloque de los principales 1 bits, por ejemplo MASK(8)0xFFFFFFE000000007ULL Creo

  • en coregrind/m_aspacemgr/aspacemgr-linux.c cambio aspacem_maxAddr de (Addr)0x800000000 - 1 a (Addr)0x2000000000ULL - 1.


Actualización: La cantidad máxima de memoria que Valgrind puede uso ha aumentado en las últimas versiones:

  • 32 GB antes de Valgrind 3,9
  • 64 GB en Valgrind 3.9 a 3.12
  • 128 GB en Valgrind 3.13
+0

Gran respuesta, gracias – piotr

Cuestiones relacionadas