Tôi muốn theo dõi việc sử dụng mallocs và giải phóng trong một ứng dụng bằng cách sử dụng móc nối và móc miễn phí.sử dụng các móc trượt glibc malloc theo chủ đề an toàn
Đây là tài liệu hướng dẫn http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
Từ trang Ví dụ, bạn có thể thấy rằng my_malloc_hook
thoáng qua chuyển mạch malloc treo tắt (hoặc móc trước đó trong chuỗi) trước khi tái gọi malloc.
Đây là vấn đề khi giám sát các ứng dụng đa luồng (xem phần cuối câu hỏi để được giải thích).
Ví dụ khác về việc sử dụng móc malloc mà tôi đã tìm thấy trên internet có cùng vấn đề.
Có cách nào để viết lại chức năng này để hoạt động chính xác trong ứng dụng đa luồng không?
Ví dụ, có hàm libc nội bộ mà móc malloc có thể gọi để hoàn tất việc phân bổ, mà không cần phải hủy kích hoạt móc của tôi.
Tôi không thể xem mã nguồn libc do chính sách pháp lý của công ty, vì vậy câu trả lời có thể hiển nhiên.
Thông số kỹ thuật thiết kế của tôi cho biết tôi không thể thay thế malloc bằng thiết kế malloc khác.
Tôi có thể giả định rằng không có móc nào khác đang được phát.
CẬP NHẬT
Kể từ khi móc malloc được tạm thời loại bỏ trong khi phục vụ các malloc, thread khác có thể gọi malloc và KHÔNG nhận được móc. Nó đã được gợi ý rằng malloc có một khóa lớn xung quanh nó ngăn chặn điều này xảy ra, nhưng nó không được ghi lại, và thực tế là tôi gọi đệ trình một cách hiệu quả malloc cho thấy bất kỳ khóa phải tồn tại sau móc, hoặc thông minh vui vẻ :
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller
Nếu một trong số chúng tôi xem xét nguồn libc và cung cấp cho bạn thông tin dựa trên đó, bạn sẽ ở cùng vị trí, hợp pháp. –
Tại sao bạn không * nhìn * tại mã nguồn libc? – Will
Vì tôi có thể gây ô nhiễm mã độc quyền của chúng tôi với mã GPL. Đơn giản chỉ cần được nói rằng một chức năng cụ thể sẽ làm những gì tôi muốn không có vấn đề đó. –