Tôi đã đọc Effective C++, 3rd edition và trong mục 2 (thích const, enums, và inlines để # định nghĩa), Scott Meyers đề cập đến bảng biểu tượng: ông giải thích rằng #defines
có thể không xuất hiện trong bảng biểu tượng .Symbol Bảng được tạo ra bởi C++
Dựa trên câu trả lời here, một chút đề xuất reading và bài viết Wikipedia, tôi sẽ xác định bảng biểu tượng như sau: vì trình biên dịch chỉ tạo tệp đối tượng cho mọi đơn vị dịch, chúng tôi vẫn cần một cách biểu tượng tham chiếu giữa các đơn vị dịch. Điều này được thực hiện bằng cách sử dụng một bảng được tạo cho mọi tệp đối tượng để biểu tượng có thể được định nghĩa ở giai đoạn sau - bởi trình liên kết khi thư mục thực thi/được tạo từ các tệp đối tượng. Trong quá trình liên kết, các ký hiệu được thay thế bằng địa chỉ bộ nhớ thích hợp của chúng bằng trình liên kết.
Dưới đây là những gì tôi muốn biết:
- là giải thích của tôi ở trên có đúng không?
- Sau khi liên kết, khi địa chỉ bộ nhớ đã được giải quyết, tôi không nghĩ rằng bảng biểu tượng là bắt buộc? Đó là, tôi nghĩ rằng bảng biểu tượng sẽ không có sẵn trong thư viện thực thi /; đúng không?
- Tôi nghi ngờ rằng bảng biểu tượng cũng hữu ích cho các tác vụ biên dịch khác? Một cái gì đó giống như xác định xung đột đặt tên có lẽ?
- Bảng biểu tượng được mô tả ở trên không giống như export table. Trong ngữ cảnh của Visual C++ ít nhất, bảng xuất khẩu xác định các ký hiệu được khai báo rõ ràng bên ngoài thư viện. Tôi cho rằng theo một nghĩa nào đó, đây là một bảng biểu tượng - nhưng không liên quan đến bảng ký hiệu mà Scott đang đề cập đến.
- Có điều gì thú vị khác về bảng biểu tượng không? Nghĩa là, có thêm thông tin chi tiết nào về các bảng biểu tượng mà tôi nên có không?
Cảm ơn bạn đã dành thời gian và đóng góp.
bảng