2011-12-27 18 views

Trả lời

12

Giới hạn là tùy ý và có thể thay đổi bằng cách biên dịch lại valgrind.

Valgrind theo dõi bộ nhớ bằng cách sử dụng mảng thưa thớt 2 cấp. 16 bit của địa chỉ được sử dụng để lập chỉ mục vào một bảng nhập 65536 chứa một con trỏ tới một bản đồ cấp hai, theo dõi một phạm vi không gian địa chỉ (thường là 2¹⁶ bytes = 64KB cho các quy trình 32 bit, 2¹⁹ bytes = 512KB cho Quy trình 64 bit). Vì vậy, tổng số lượng bộ nhớ có thể được theo dõi bởi mảng thưa thớt 2 cấp này là 65536 × kích thước đoạn này. Bằng cách sửa đổi mã, kích thước của các khối này có thể được tăng lên với công suất lớn hơn là 2, với chi phí sử dụng nhiều bộ nhớ hơn để theo dõi hầu hết các phần từng phần.

Trong this message trên valgrind người sử dụng danh sách gửi thư, Julian Seward giải thích làm thế nào để tăng giới hạn từ 32GB đến 128GB:

  • trong memcheck/mc_main.c thay đổi N_PRIMARY_BITS19-21

  • thay đổi các xác nhận ở cuối memcheck/mc_main.c tương ứng:

    • MAX_PRIMARY_ADDRESS → 4 * (hiện có giá trị + 1) - 1
    • cho MASK(1/2/4/8) khẳng định, thiết lập để không những tận cùng bên phải hai '1' bit trong khối lãnh đạo 1 bit, ví dụ: MASK(8)0xFFFFFFE000000007ULL Tôi nghĩ

  • trong coregrind/m_aspacemgr/aspacemgr-linux.c thay đổi aspacem_maxAddr từ (Addr)0x800000000 - 1 để (Addr)0x2000000000ULL - 1.


Cập nhật: Số tiền tối đa bộ nhớ mà Valgrind có thể sử dụng đã tăng lên trong các phiên bản gần đây:

  • 32 GB trước khi Valgrind 3,9
  • 64 GB Valgrind 3.9 đến 3.12
  • 128 GB trong Valgrind 3.13
+0

Câu trả lời hay, cảm ơn – piotr

Các vấn đề liên quan