Câu hỏi Bảng biểu tượng là gì?


Ai đó có thể mô tả những gì một bảng biểu tượng là trong bối cảnh của C và C + +?


76
2017-09-16 03:14


gốc




Các câu trả lời:


Có hai ý nghĩa chung và liên quan của các bảng biểu tượng ở đây.

Đầu tiên, có bảng biểu tượng trong các tệp đối tượng của bạn. Thông thường, trình biên dịch C hoặc C ++ biên dịch một tệp nguồn đơn thành một tệp đối tượng có đuôi .obj hoặc .o. Điều này chứa một tập hợp các mã và dữ liệu thực thi mà trình liên kết có thể xử lý vào một ứng dụng đang hoạt động hoặc thư viện được chia sẻ. Tệp đối tượng có cấu trúc dữ liệu được gọi là bảng biểu tượng trong đó ánh xạ các mục khác nhau trong tệp đối tượng đến các tên mà trình liên kết có thể hiểu được. Nếu bạn gọi một hàm từ mã của bạn, trình biên dịch không đặt địa chỉ cuối cùng của thường trình trong tệp đối tượng. Thay vào đó, nó đặt một giá trị giữ chỗ vào mã và thêm một ghi chú cho trình liên kết tra cứu tham chiếu trong các bảng biểu tượng khác nhau từ tất cả các tệp đối tượng mà nó xử lý và gắn kết vị trí cuối cùng ở đó.

Thứ hai, cũng có bảng biểu tượng trong một thư viện chia sẻ hoặc DLL. Điều này được tạo ra bởi trình liên kết và phục vụ để đặt tên cho tất cả các chức năng và các mục dữ liệu được hiển thị cho người dùng của thư viện. Điều này cho phép hệ thống thực hiện liên kết thời gian chạy, giải quyết các tham chiếu mở cho các tên đó đến vị trí mà thư viện được nạp vào bộ nhớ.

Nếu bạn muốn tìm hiểu thêm, tôi đề nghị cuốn sách tuyệt vời "Linkers and Loaders" của John Levine.văn bản liên kết


70
2017-09-16 03:28



Chào Ben, trong trường hợp thứ hai, bạn đang đề cập đến bảng xuất khẩu? Đó là, là bảng xuất khẩu một trường hợp đặc biệt của bảng biểu tượng? Hoặc là những khái niệm không liên quan này? - Pooven
Chào. Tôi tin rằng nó không có trong bất kỳ tập tin đối tượng nào nhưng được nhắc đến từ chúng. Thứ hai, bạn có thể giải thích thêm một chút về ý nghĩa của "vị trí cuối cùng" không? Địa chỉ thực hoặc địa chỉ tương đối cuối cùng trong mã nguồn. - zgulser
Là thứ hai bạn đề cập đến một tham chiếu đến chi nhánh, hoặc bàn gọi? - Nik-Lz


Tóm lại, nó là ánh xạ của tên mà bạn gán một biến cho địa chỉ của nó trong bộ nhớ, bao gồm siêu dữ liệu như kiểu, phạm vi và kích thước. Nó được trình biên dịch sử dụng.

Nói chung, không chỉ C [++] *. Về mặt kỹ thuật, nó không phải lúc nào cũng bao gồm địa chỉ bộ nhớ trực tiếp. Nó phụ thuộc vào ngôn ngữ, nền tảng, vv trình biên dịch đang nhắm mục tiêu.


22
2017-09-16 03:16



Tôi nghĩ, điều quan trọng là bạn phải đề cập đến nội dung của địa chỉ bằng cách nói "nó không phải luôn luôn bao gồm địa chỉ bộ nhớ trực tiếp". - zgulser


Trong Linux, bạn có thể sử dụng lệnh:

-sơ đồ đối tượng

để liệt kê bảng biểu tượng của tệp đối tượng đó.


13
2017-07-28 16:44





Bảng biểu tượng là danh sách các "ký hiệu" trong một chương trình / đơn vị. Ký hiệu thường là tên của các biến hoặc hàm. Biểu tượng bảng có thể được sử dụng để xác định nơi trong các biến bộ nhớ hoặc chức năng sẽ được đặt.


8
2017-09-16 03:26





Kiểm tra Bảng biểu tượng mục nhập wikipedia.


4
2017-09-16 03:17





Bảng biểu tượng là một cấu trúc dữ liệu quan trọng được tạo và duy trì bởi các trình biên dịch để lưu trữ thông tin về sự xuất hiện của các thực thể khác nhau như tên biến, tên hàm, đối tượng, lớp, giao diện, v.v.


0
2017-11-01 13:41



Linkers và assemblers cũng xử lý các bảng biểu tượng (thường đơn giản hơn các trình biên dịch). - Basile Starynkevitch