2010-05-14 41 views
7
  1. Theo bài đăng từ năm 2008 (Tôi không thể tìm thấy ngay bây giờ), glibc heap check không hoạt động trong môi trường đa luồng. Vẫn còn tình hình trong năm 2010?
  2. Kiểm tra heap có được bật theo mặc định không? (gcc 4.1.2)? Tôi không đặt MALLOC_CHECK_, không biết gọi mcheck(), nhưng đôi khi vẫn nhận được lỗi glibc đôi miễn phí với backtrace. Có lẽ nó được kích hoạt bởi một số cờ biên dịch?
+1

sử dụng valgrind và câu hỏi trở nên phần nào tranh luận. http://valgrind.org/ – msw

+1

@msw valgrind là tốt và chúng không va chạm. MALLOC_CHECK_ nhẹ hơn nhiều so với valgrind và không yêu cầu bất kỳ hành động frp, người dùng nào (ví dụ: chạy ứng dụng thông qua lvalgrind, kiểm tra kết xuất của valgrind), khi bạn thiết lập nó. Đây không phải là tình huống với valgrind. Bất kỳ cách nào, câu hỏi của tôi không phải là về valgrind :) – dimba

Trả lời

3

Theo mặc định, không sử dụng malloc_check_ hoặc mcheck(), glibc thực hiện một số kiểm tra nhỏ không làm ảnh hưởng đến hiệu suất, như gọi hai lần miễn phí() trên cùng một đoạn bộ nhớ. Đó là lý do tại sao bạn nhận được một số thông điệp này, nhưng bạn sẽ không có tất cả các thông báo được cung cấp bởi api thay thế malloc mà bạn có thể nhận được bằng cách sử dụng MALLOC_CHECK_ (đang thực hiện nhiều thử nghiệm hơn, nhưng cũng tốn nhiều CPU hơn). Bạn có thể kiểm tra điều này bằng cách kích hoạt một lỗi và thử nghiệm nó có và không có malloc_check_. Ví dụ, đối với một lỗi đơn giản đôi(), tôi nhận được "đôi miễn phí hoặc tham nhũng (trên)" hoặc "miễn phí(): con trỏ không hợp lệ" tùy thuộc vào bất cứ khi nào tôi đặt MALLOC_CHECK_ hay không.

Để trả lời 1/câu hỏi, kiểm tra dựa trên móc malloc vì chúng tồn tại (như 15 năm), và những người không có ý định là chủ đề an toàn.

Nguồn: glibc/malloc/malloc.c, http://sourceware.org/bugzilla/show_bug.cgi?id=9939

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