Chương trình C++ sử dụng một số tệp DLL và QT phải được trang bị thay thế malloc (như tcmalloc) cho các vấn đề hiệu suất có thể được xác minh là do Windows malloc gây ra. Với Linux, không có vấn đề, nhưng với các cửa sổ, có một số phương pháp tiếp cận, và tôi thấy không ai trong số họ hấp dẫn:Thay thế malloc Windows (ví dụ, tcmalloc) và crt động liên kết
1. Đặt malloc mới trong lib và hãy chắc chắn để liên kết nó đầu tiên (Other SO-question)
Điều này có bất lợi, ví dụ: strdup will still use the old malloc and a free may crash the program.
2. Remove malloc từ thư viện libcrt tĩnh với lib.exe (Chrome)
này được kiểm tra/sử dụng (?) Cho chrome/chromium, nhưng có những bất lợi mà nó chỉ làm việc với tĩnh nối crt . Liên kết tĩnh có vấn đề nếu một thư viện hệ thống được liên kết động với msvcrt có thể là mismatches in the heap allocation/deallocation. Nếu tôi hiểu nó một cách chính xác, tcmalloc có thể được liên kết động như vậy mà có một đống phổ biến cho tất cả các dlls tự biên dịch (đó là tốt).
3. patch đang crt nguồn (firefox)
Firefox's jemalloc rõ ràng vá mã nguồn cửa sổ CRT và xây dựng một crt mới. Điều này lại có vấn đề liên kết tĩnh/động ở trên.
Người ta có thể nghĩ đến việc sử dụng điều này để tạo MSVCRT động, nhưng tôi nghĩ điều này là không thể, bởi vì giấy phép cấm cung cấp MSVCRT được vá có cùng tên.
4. Tự động vá CRT được nạp vào thời gian chạy
Một số allocators bộ nhớ hàng thương mại có thể làm ảo thuật như vậy. tcmalloc cũng có thể làm, nhưng điều này có vẻ khá xấu xí. Nó có một số vấn đề, nhưng chúng đã được sửa. Hiện tại, với tcmalloc nó không hoạt động trong các cửa sổ 64 bit.
Có phương pháp tiếp cận tốt hơn không? Có ý kiến gì không?
Bạn đã sử dụng phương pháp tiếp cận nào? Mà một trong những bạn đã sử dụng để xác minh khẳng định rằng các cấp phát thay thế làm việc tốt hơn so với một được cung cấp với malloc CRT? Bạn đã sử dụng phiên bản CRT nào và nó có tốt hơn/xấu hơn/giống như phiên bản mới hơn không? –
Tại sao không thử thay thế toàn cầu C++ mới? Sẽ không làm việc (và phù hợp với libs + ứng dụng chia sẻ chính nhị phân + ms crt như là một thiết lập lib chia sẻ)? – mlvljr