Предел произвольный и может быть изменен путем перекомпиляции valgrind.
Valgrind отслеживает память, используя 2-уровневый разреженный массив.16 бит адреса используются для индексации в таблицу с 65536 записями, содержащую указатель на карту второго уровня, которая отслеживает диапазон адресного пространства (обычно 2 байта = 64 КБ для 32-битных процессов, 2 байта = 512 КБ для64-битные процессы).Таким образом, общий объем памяти, который можно отслеживать с помощью этого двухуровневого разреженного массива, составляет 65536 × этот размер куска.Изменяя код, можно увеличить размер этих чанков до степени 2, за счет использования большего объема памяти для отслеживания большинства частичных чанков.
В это сообщение вСписок рассылки valgrind-пользователей, Джулиан Сьюард, объясняет, как увеличить ограничение с 32 ГБ до 128 ГБ:
в memcheck/mc_main.c
изменить N_PRIMARY_BITS
с 19
на 21
соответственно изменить утверждения в конце memcheck/mc_main.c
:
MAX_PRIMARY_ADDRESS
→ 4 * (существующее значение + 1) - 1 - для утверждений
MASK(1/2/4/8)
, установить в ноль самые правые два бита '1' в блоке начальных 1 бит, например, MASK(8)
→ 0xFFFFFFE000000007ULL
Я думаю,
в coregrind/m_aspacemgr/aspacemgr-linux.c
изменить aspacem_maxAddr
с (Addr)0x800000000 - 1
на (Addr)0x2000000000ULL - 1
.
Обновление: Максимальный объем памяти, который может использовать Valgrind, увеличился в последних версиях:
- 32 ГБ до Valgrind 3.9
- 64 ГБ в Valgrind 3.9–3.12
- 128 ГБв Вальгринде 3,13