2011-01-21 6 views
5

Câu hỏi liên quan đến nội dung của nhị phân .pch được tạo bởi trình biên dịch Visual Studio. Nó chứa gì? Chỉ là cây được phân tích cú pháp của các tệp tiêu đề hoặc mã đối tượng?Tiêu đề biên dịch sẵn của Visual Studio bao gồm những gì?

Hãy xem xét ví dụ sau:

// myheader.h 
#include <vector> 
class A { 
public: 
    void add(int i) { v.push_back(i); } 
private: 
    std::vector<int> v; 
}; 

có bao gồm tiêu đề này trong tập được biên dịch sẵn kết quả trong một mẫu instantiation hoàn chỉnh các vector <int> được biên soạn và bổ sung vào .pch?

Để cung cấp thêm một số ngữ cảnh; nếu chỉ có cây phân tích cú pháp được biên dịch trước, điều này có nghĩa là mã đối tượng cho các mẫu được tạo ra sẽ vẫn được tạo một lần cho mỗi đơn vị biên dịch với kết quả tăng lên trong thời gian biên dịch và liên kết. Vì vậy, "hợp nhất xây dựng"/giảm đơn vị biên dịch vẫn sẽ là một yếu tố có liên quan trong việc giảm thời gian xây dựng ngay cả với các tiêu đề biên dịch sẵn được kích hoạt.

Trả lời

1

Mặc dù tôi không thể nói điều nhất định về nội bộ của PCH, như đối với đoàn kết xây dựng, thậm chí nếu vector<int> là hoàn toàn thuyết minh trong PCH, Tôi nghĩ rằng đoàn kết xây dựng vẫn có một số lợi thế.

Như bạn có thể biết, C++ phải giữ nguyên quy tắc một định nghĩa (ODR). Trình liên kết phải hợp nhất các định nghĩa của mẫu nằm rải rác trong mỗi tệp đối tượng thành một.
Đó là, khoảng nói, C++ có phải làm như sau:

  1. nhanh chóng các mẫu
  2. tập tin Write đối tượng
  3. Đọc lại đối tượng tập tin để liên kết
  4. Resolve ODR

Unity xây dựng làm cho nó có thể lưu tải trên ở một mức độ nào đó.
Tuy nhiên, tôi không thể nói rằng khoản tiết kiệm ở trên sẽ vượt qua việc biên dịch không thống nhất với PCH trong môi trường của bạn.