Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

C++ Internals (Nội tại C++): Biên dịch và Các khái niệm cốt lõi

C++ Internals ám chỉ cách trình biên dịch C++ xử lý mã nguồn .cpp và tạo ra file thực thi. C++ là ngôn ngữ phổ biến cho phần mềm hệ thống, mở rộng từ C. C++ là ngôn ngữ biên dịch (compiled language). Trình biên dịch dịch mã C++ thành file object hoặc file thực thi chứa các lệnh máy và metadata.

Cách điển hình để biên dịch chương trình C++: chạy trình biên dịch trên mã nguồn. Trình biên dịch sinh ra lệnh máy - tập hợp lệnh CPU hỗ trợ. Điều này có nghĩa là các khái niệm Hướng đối tượng (OOP) được triển khai bằng các lệnh máy. Các trình biên dịch C++ khác nhau có thể dùng chiến lược khác nhau, viết bằng ngôn ngữ khác, nhưng có mẫu chung.

Người muốn hiểu cách biên dịch code nên nắm C++ internals. Hiểu cách trình biên dịch hoạt động giúp viết code tốt hơn.

Lập trình viên viết code chế độ hỗn hợp (C, C++, assembly) sẽ thấy rất hữu ích.

Các thành phần chính của C++ Internals

  • Function Overloading - Nhiều định nghĩa cho cùng một tên hàm.
  • Class - Thực thể gom dữ liệu và hàm liên quan.
  • Structure - Thực thể chứa dữ liệu các kiểu khác nhau.
  • Constructor - Hàm mặc định của class được gọi khi tạo đối tượng.
  • Destructor - Hàm mặc định của class được gọi khi hủy đối tượng.
  • Inheritance - Kế thừa: sử dụng thành viên của class khác.
  • Multiple Inheritance - Một class kế thừa nhiều base class.
  • Multilevel Inheritance - A kế thừa B, B kế thừa C.
  • Virtual Functions - Hàm được định nghĩa lại trong class con.
  • Virtual Base Class - Ngăn nhiều instance của cùng base class trong kế thừa đa cấp.

Quy trình biên dịch tổng quát

  1. Preprocessing - Xử lý #include, #define, macro.
  2. Compilation - Dịch sang Assembly.
  3. Assembly - Dịch sang Object code (.o/.obj).
  4. Linking - Liên kết các object file, thư viện thành executable.

Name Mangling

C++ hỗ trợ function overloading, nên trình biên dịch phải mã hóa tên hàm (name mangling) để phân biệt các overload dựa trên tham số. Đây là lý do C++ không thể link trực tiếp với C nếu không dùng extern "C".

V-Table (Virtual Table)

Cơ chế triển khai đa hình (polymorphism) qua virtual function. Mỗi class có virtual function có một v-table con trỏ (vptr) trỏ đến bảng hàm ảo.