Có thể sử dụng mã tự sửa đổi để tăng tốc độ gọi hàm trong các thư viện được liên kết động?
Theo tôi hiểu, các thư viện chia sẻ ELF sử dụng một loại bảng nhảy gián tiếp (bảng liên kết thủ tục hoặc PLT) để cho phép liên kết lười biếng các chức năng của thư viện. Mục đích dường như là để tránh phải sửa đổi bảng trong đoạn mã trong khi vẫn cho phép giải quyết lười biếng các vị trí chức năng trong cuộc gọi đầu tiên.
Sẽ không nhanh hơn để tự động tạo mã cho bảng đó khi tải, hoặc thậm chí có thể ở lệnh gọi hàm đầu tiên?
Có phải là để cho phép chia sẻ phân đoạn mã giữa các quy trình càng nhiều càng tốt (một bảng động sẽ là riêng tư đối với một quy trình)? Có phải vì lý do bảo mật (mã có thể ghi không nên thực thi - nhưng JIT luôn làm vậy và quyền ghi có thể được thêm và xóa bởi trình tải trước khi thực sự khởi động chương trình)?
Hoặc nó là sự kết hợp của những thứ đó và mức tăng hiệu suất nhỏ cho mỗi lệnh gọi chức năng sẽ không đáng để bỏ công sức?