Tôi biết cách thay thế malloc
bằng LD_PRELOAD
; thư viện được tải trước được ưu tiên, vì vậy nếu chúng tôi tải trước jemalloc
, tệp thực thi có phiên bản malloc
. Tuy nhiên, khi chúng tôi xây dựng ứng dụng với -ljemalloc
, chúng tôi cũng liên kết nó với glibc
. Làm thế nào Linux biết rằng nó phải sử dụng jemalloc
malloc
và không phải glibc
một? Nếu tôi sẽ liên kết cả hai jemalloc
và tcmalloc
, chúng tôi sẽ có 3 malloc
ngay bây giờ, điều gì và tại sao Linux (hoặc có thể là trình liên kết, tôi không chắc chắn) sẽ chọn?Làm thế nào Linux quyết định `malloc` để sử dụng?
6
A
Trả lời
2
Bạn có thể kiểm tra thứ tự các thư viện được nạp bởi chạy:
strace -ff -s 999 YOUR_BINARY 2>&1 | grep -e 'library1' -e 'library2'
Trình tự phải phù hợp với sản lượng từ ldd YOUR_BINARY
.
Và có, như đã lưu ý, thư viện đầu tiên sẽ được ưu tiên.
1
Điều đó thật thú vị. Một số hệ điều hành cảnh báo bạn về các biểu tượng được sao chép tại thời gian liên kết (AIX, IIRC). Linux thì không.
Điều gì đó tương tự xảy ra khi thiết bị ứng dụng MPI thông qua giao diện PMPI. Trong trường hợp này, thứ tự là quan trọng. Nếu công cụ thiết bị đo đạc xuất hiện sau thư viện MPI, thì việc xen kẽ không hoạt động. Vì vậy, tôi nghĩ rằng trong trường hợp của bạn sẽ giống nhau. Trình liên kết sẽ chọn theo thứ tự đã cho của họ.
Các vấn đề liên quan
- 1. Làm thế nào để malloc char ** bảng?
- 2. Bạn quyết định sử dụng cổng nào?
- 3. Làm thế nào để gitlab quyết định người dùng nào sử dụng cho công việc
- 4. Làm thế nào tôi có thể tạo một bộ đệm mà không sử dụng malloc() trong hạt nhân Linux?
- 5. Làm thế nào để sử dụng LuaInterface trên Mono/Linux
- 6. Golang: Làm thế nào để sử dụng syscall.Syscall trên Linux?
- 7. Sử dụng Malloc Hooks
- 8. Trong React làm thế nào để quyết định có sử dụng componentWillReceiveProps hoặc componentWillMount?
- 9. Làm thế nào để quyết định giữa hai số ngẫu nhiên bằng cách sử dụng javascript?
- 10. Sqlite hoặc MySql? Làm thế nào để quyết định?
- 11. Làm thế nào để quyết định kích thước Cụm Kafka
- 12. Làm cách nào để quyết định khoảng thời gian nào cần sử dụng cho requestLocationUpdates?
- 13. Làm thế nào để lập trình xác định ứng dụng mặc định trong linux
- 14. Làm thế nào để git quyết định phiên bản nào của svn để sử dụng trong git-svn?
- 15. như thế nào WebRTC được quyết định lần lượt Servers để sử dụng
- 16. Làm thế nào để giải quyết một vấn đề cho phép Linux cho OpenCart
- 17. Selenium3.4.0-Python3.6.1: Trong Selenium-Python ràng buộc bằng cách sử dụng unittest làm thế nào để quyết định khi nào nên sử dụng self.assertIn hoặc khẳng định
- 18. Làm thế nào để làm cho kịch bản trong linux sử dụng interpteter của tôi và làm việc? (#!)
- 19. Làm thế nào để sử dụng Linux openssl để tạo CSR cho iOS?
- 20. Quyết định khi nào nên sử dụng XmlDocument vs XmlReader
- 21. ScopedProxy quyết định phiên nào sẽ sử dụng?
- 22. Làm thế nào để giải quyết Microsoft.VisualStudio.ExtensionManager.MissingReferencesException
- 23. Làm thế nào để sử dụng inotify?
- 24. Làm thế nào để sử dụng ổn định trên Kotlin
- 25. Làm thế nào để phát hiện phân phối Linux nào đang được sử dụng
- 26. Làm thế nào để bạn lấy tên tệp của tempfile để sử dụng trong Linux?
- 27. Làm thế nào để phân bổ động bộ nhớ bằng cách sử dụng Assembly và System Calls Dưới Linux
- 28. Quyết định khi nào sử dụng ConfigureAwait (false)
- 29. Làm thế nào để đúng malloc cho mảng cấu trúc trong C
- 30. Làm thế nào để sử dụng bộ nhớ tiếp giáp trong hạt nhân Linux?
Người đầu tiên thấy. Bây giờ để hiểu được thứ tự nó trông như thế nào ;-) –
Bạn có bao gồm 'glibc' trong định nghĩa của linux không? Hoặc 'ld.so'? Linux có thể được định nghĩa mờ theo thời gian. – MSalters
Vâng, về định nghĩa của Linux trong câu hỏi này, thực sự nó có nghĩa là: lựa chọn thư viện được thực hiện tại thời gian liên kết (bởi linker) hoặc tại thời gian chạy (bởi "Linux"); ví dụ, nếu 'libjemalloc' vắng mặt, phần mềm sẽ tự động hạ cấp xuống một triển khai' malloc' khác trong một 'so' khác được liên kết với phần mềm không? – Vitaliy