2017-01-11 17 views
6

Tham chiếu Wiki đề cập đến một số tiêu đề đôi khi có chứa số lượng lớn mã nguồn và do đó có chúng như tiêu đề được biên dịch trước sẽ tiết kiệm thời gian biên dịch. https://en.wikipedia.org/wiki/Precompiled_headerSự khác biệt giữa các tiêu đề được biên dịch trước và các tệp nhị phân được biên dịch trước

nếu tiêu đề được biên dịch trước có thể chứa mã nguồn đã biên dịch thì mã nguồn khác với mã nhị phân được biên dịch trước như thế nào.

+3

Không có điều gì như là một nhị phân không biên dịch trước, do đó, khái niệm 'nhị phân biên dịch trước' không thực sự là một điều để so sánh bất cứ điều gì khác để ở nơi đầu tiên. – EJP

+0

cảm ơn vì đã chỉ ra ... Tôi nghĩ rằng nó nên được gọi là nguồn được biên dịch trước – bharath

Trả lời

2

C++ xác định khái niệm "đơn vị dịch". Đơn vị dịch thuật là điểm neo nơi bản dịch bắt đầu và chương trình thường bao gồm một số đơn vị dịch như vậy. Các đơn vị nào được chuyển đến trình biên dịch là "đơn vị dịch" thực sự phụ thuộc vào các cài đặt trong IDE của bạn, trên các tệp makefiles và các cấu hình khác. Tuy nhiên, hầu hết các cấu hình chính thức đều có các tệp .cpp.c - tệp của bạn dưới dạng đơn vị dịch.

Để dễ dàng hơn, chúng ta có thể nghĩ đơn vị dịch là thứ mà trình biên dịch tạo ra nhị phân và trình liên kết kết hợp một vài tệp nhị phân rồi đến chương trình.

Vì vậy, các tệp tiêu đề thường không được định cấu hình làm đơn vị dịch và chúng thường không tự tạo ra nhị phân, ngay cả khi chúng chứa mã nguồn. Họ được cho là được nhập khẩu từ các đơn vị dịch thuật và sẽ được biên soạn cùng với họ.

Nếu các tệp tiêu đề này chứa rất nhiều mã nguồn, sẽ được bao gồm trong một số đơn vị dịch, có nghĩa là (trước) biên dịch chúng một lần và giữ càng nhiều thông tin càng tốt trong kết quả trung gian biên dịch đơn vị dịch thực tế nhanh hơn. Điều này tiết kiệm thời gian, nhưng "trung gian nhị phân" là một cái gì đó nội bộ và không tiếp xúc.

Tuy nhiên, từ nội dung và loại mã nguồn trong đó, tệp tiêu đề không phân biệt được với các tệp mã nguồn khác. Bạn có thể truyền một "tệp tiêu đề" cho trình biên dịch dưới dạng đơn dịch, và trình biên dịch sẽ thực sự tạo ra một nhị phân "bình thường" ra khỏi nó. Nó thực sự chỉ là họ thường không được khai báo như là một gốc để biên dịch.

Hy vọng điều đó sẽ hữu ích.

1

Sự khác biệt chính là nhiều thông tin được lưu trữ trong tiêu đề được biên dịch trước so với nguồn được biên dịch. Nếu bạn biên dịch nguồn thành thông tin nhị phân về định nghĩa và mẫu bị mất. Xác định biến mất cho các giá trị và các mẫu của chúng chỉ nhận được ở dạng được khởi tạo trong nhị phân. Một tiêu đề được biên dịch trước giữ thông tin về dạng mẫu chung và tên và giá trị của các định nghĩa khi chúng cần thiết, nếu phần đầu được biên dịch trước được bao gồm ở đâu đó. Đối với tiêu đề được biên dịch trước nguồn thuần là giống hệt với nguồn đã biên dịch.

+0

"Đối với tiêu đề hoàn toàn nguồn gốc thuần túy giống hệt với nguồn được biên dịch". Tôi có thể giả định rằng, phần mã nguồn được chuyển đổi trực tiếp thành dạng nhị phân khi tệp .pch được tạo. – bharath

+1

Đầu tiên: Không nên có mã thực trong tệp tiêu đề bên cạnh hàm nội dòng. Nội dung cụ thể nhất có lẽ sẽ được chuyển thành nhị phân thực và được sao chép sang địa điểm sử dụng. Mọi thứ khác như macro và mẫu giống như hàm, là các phần mã nổi bật nhất trong tệp tiêu đề, không thể được chuyển sang mã nhị phân, vì chúng là đối số tùy thuộc. – user6556709

Các vấn đề liên quan