All C++ compilers have one serious performance problem to deal with. Compiling C++ code is a long, slow process.
Compiling headers included on top of C++ files is a very long, slow process. Compiling the huge header structures that form part of Windows API and other large API libraries is a very, very long, slow process. To have to do it over, and over, and over for every single Cpp source file is a death knell.
This is not unique to Windows but an old problem faced by all compilers that have to compile against a large API like Windows.
The Microsoft compiler can ameliorate this problem with a simple trick called precompiled headers. The trick is pretty slick: although every CPP file can potentially and legally give a sligthly different meaning to the chain of header files included on top of each Cpp file (by things like having different macros #define'd in advance of the includes, or by including the headers in different order), that is most often not the case. Most of the time, we have dozens or hundreds of included files, but they all are intended to have the same meaning for all the Cpp files being compiled in your application.
The compiler can make huge time savings if it doesn't have to start to compile every Cpp file plus its dozens of includes literally from scratch every time.
The trick consists on designating a special header file as the starting point of all compilation chains, the so called 'precompiled header' file, which is commonly a file named stdafx.h simply for historical reasons.
Simply list all your big huge headers for your APIs in your stdafx.h file, in the appropriate order, and then start each of your CPP files at the very top with an #include "stdafx.h", before any meaningful content (just about the only thing allowed before is comments).
Under those conditions, instead of starting from scratch, the compiler starts compiling from the already saved results of compiling everything in stdafx.h.
I don't believe that this trick is unique to Microsoft compilers, nor do I think it was an original development.
For Microsoft compilers, the setting that controls the use of precompiled headers is controlled by a command line argument to the compiler: /Yu "stdafx.h". As you can imagine, the use of the stdafx.h file name is simply a convention; you can change the name if you so wish.
In Visual Studio 2010, this setting is controlled from the GUI via Right-clicking on a CPP Project, selecting 'Properties' and navigating to "Configuration PropertiesC/C++Precompiled Headers". For other versions of Visual Studio, the location in the GUI will be different.
Note that if you disable precompiled headers (or run your project through a tool that doesn't support them), it doesn't make your program illegal; it simply means that your tool will compile everything from scratch every time.
If you are creating a library with no Windows dependencies, you can easily comment out or remove #includes from the stdafx.h file. There is no need to remove the file per se, but clearly you may do so as well, by disabling the precompile header setting above.
Tất cả các trình biên dịch C++ có một vấn đề hiệu suất nghiêm trọng để đối phó với. Biên dịch C++ mã là một quá trình lâu dài và chậm.Biên soạn tiêu đề bao gồm trên đầu trang của tập tin C++ là một quá trình rất dài và chậm. Biên soạn các công trình lớn tiêu đề mà tạo thành một phần của Windows API và các thư viện API lớn khác là một quá trình rất dài và chậm. Phải làm cho nó lên, và hơn, và hơn cho mỗi Cpp đơn tệp nguồn là một chuông cáo phó cái chết.Đây không phải là duy nhất cho Windows nhưng một vấn đề cũ phải đối mặt với tất cả trình biên dịch phải biên dịch với một API lớn như Windows.Trình biên dịch của Microsoft có thể phục hồi các vấn đề này với một thủ thuật đơn giản gọi là tạo các tiêu đề. The trick là khá slick: mặc dù mỗi tập tin CPP có thể có khả năng và hợp pháp cho một ý nghĩa khác nhau sligthly để chuỗi tiêu đề các tập tin bao gồm trên đầu trang của mỗi tập tin Cpp (bởi những thứ như có macro khác nhau #define'd trước các bao gồm, hoặc bởi bao gồm tiêu đề theo thứ tự khác), thường không phải là trường hợp. Hầu hết thời gian, chúng tôi có hàng chục hay hàng trăm bao gồm tập tin, nhưng tất cả đều được dự định để có ý nghĩa tương tự cho tất cả các tập tin Cpp được biên soạn trong ứng dụng của bạn.Trình biên dịch có thể làm cho thời gian rất lớn tiết kiệm nếu nó không phải bắt đầu để biên dịch tất cả các file Cpp cộng với hàng chục của nó bao gồm nghĩa đen từ đầu mỗi thời gian.Bí quyết bao gồm trên chỉ định một tập tin tiêu đề đặc biệt như là điểm khởi đầu của tất cả các chuỗi tổng hợp, tập tin như vậy gọi là 'tạo tiêu đề', mà thường là một tập tin tên stdafx.h chỉ đơn giản là vì lý do lịch sử.Chỉ đơn giản là có thể danh sách tất cả các tiêu đề lớn lớn của bạn cho các API của bạn trong tập tin stdafx.h của bạn, theo thứ tự thích hợp, và sau đó bắt đầu mỗi tập tin CPP của bạn ở đầu với một #include "stdafx.h", trước khi bất kỳ nội dung có ý nghĩa (chỉ là về điều duy nhất cho phép trước khi là ý kiến).Dưới những điều kiện, thay vì bắt đầu từ đầu, trình biên dịch bắt đầu từ biên soạn từ các kết quả đã lưu của biên dịch tất cả mọi thứ trong stdafx.h.Tôi không tin rằng bí quyết này là duy nhất cho trình biên dịch của Microsoft, cũng không để tôi nghĩ rằng đó là một sự phát triển ban đầu.Cho trình biên dịch của Microsoft, các thiết lập kiểm soát việc sử dụng các tiêu đề tạo được điều khiển bởi một đối số dòng lệnh để trình biên dịch: /Yu "stdafx.h". Như bạn có thể tưởng tượng, sử dụng tên tập tin stdafx.h là chỉ đơn giản là một hội nghị; bạn có thể thay đổi tên nếu bạn muốn.Trong Visual Studio 2010, thiết đặt này được điều khiển từ GUI qua nhấp chuột phải vào một dự án CPP, chọn 'Properties' và điều hướng đến "cấu hình PropertiesC / C ++ Precompiled tiêu đề". Các phiên bản khác của Visual Studio, vị trí trong GUI sẽ khác nhau.Lưu ý rằng nếu bạn không thể tạo các tiêu đề (hoặc chạy các dự án của bạn thông qua một công cụ, mà không hỗ trợ họ), nó không làm cho chương trình bất hợp pháp; nó chỉ có nghĩa là công cụ của bạn sẽ biên dịch tất cả mọi thứ từ đầu mỗi thời gian.Nếu bạn đang tạo một thư viện với không có sự phụ thuộc của Windows, bạn có thể dễ dàng nhận xét ra hoặc hủy bỏ #includes từ các tập tin stdafx.h. Không cần phải loại bỏ các tập tin cho mỗi se, nhưng rõ ràng bạn có thể làm như vậy là tốt, bằng cách vô hiệu hóa các tiêu đề precompile được thiết lập ở trên.
đang được dịch, vui lòng đợi..

Tất cả các trình biên dịch C ++ có một vấn đề hiệu suất nghiêm trọng để đối phó với. Biên dịch mã C ++ là một quá trình chậm dài.
Tiêu đề biên soạn bao gồm trên đầu trang của các file C ++ là một quá trình chậm rất dài. Biên dịch các cấu trúc tiêu đề rất lớn là thành phần của Windows API và các thư viện API lớn khác là một quá trình chậm rất, rất dài. Phải làm điều đó hơn và hơn và hơn cho mọi nguồn tập tin CPP duy nhất là một hồi chuông báo tử.
Đây không phải là duy nhất cho Windows nhưng một vấn đề cũ phải đối mặt của tất cả các trình biên dịch phải biên dịch chống lại một API lớn như Windows.
Microsoft biên dịch có thể cải thiện vấn đề này với một thủ thuật đơn giản được gọi là tiêu đề biên dịch sẵn. Bí quyết là khá trơn: mặc dù mỗi tập tin CPP có thể có khả năng về mặt pháp lý và cung cấp cho một ý nghĩa khác nhau để sligthly chuỗi các tập tin tiêu đề bao gồm trên đầu trang của mỗi tập tin CPP (bởi những thứ giống như có macro khác nhau # define'd trước bao gồm, hoặc bằng cách bao gồm các tiêu đề theo thứ tự khác nhau), đó là thường không phải là trường hợp. Hầu hết thời gian, chúng ta có hàng chục hoặc hàng trăm tập tin bao gồm, nhưng tất cả đều nhằm mục đích có ý nghĩa tương tự cho tất cả các tập tin CPP được biên soạn trong ứng dụng của bạn.
Trình biên dịch có thể giúp tiết kiệm thời gian rất lớn, nếu nó không phải bắt đầu để biên dịch tất cả các file CPP cộng với hàng chục của nó bao gồm nghĩa đen từ đầu mỗi lần.
Bí quyết bao gồm trên chỉ định một tập tin tiêu đề đặc biệt như là điểm khởi đầu của tất cả các chuỗi trình biên soạn, những cái gọi là tập tin 'biên dịch sẵn tiêu đề', mà thường là một tập tin có tên stdafx h chỉ đơn giản là vì những lý do lịch sử.
chỉ cần liệt kê tất cả các tiêu đề lớn lớn của bạn cho các API của bạn trong tập tin stdafx.h của bạn, theo thứ tự thích hợp, và sau đó bắt đầu mỗi file CPP của bạn ở đầu với một #include "stdafx.h" , trước khi bất kỳ nội dung ý nghĩa (chỉ về điều duy nhất cho phép trước khi là ý kiến).
Dưới những điều kiện này, thay vì bắt đầu từ đầu, các trình biên dịch bắt đầu biên soạn từ các kết quả biên dịch tất cả mọi thứ trong stdafx.h đã được lưu lại.
tôi không tin rằng trick này là duy nhất để trình biên dịch Microsoft, cũng không làm tôi nghĩ đó là một sự phát triển ban đầu.
Đối với các trình biên dịch Microsoft, các thiết lập để kiểm soát việc sử dụng các tiêu đề biên dịch sẵn được điều khiển bởi một đối số dòng lệnh để trình biên dịch: / Yu "stdafx.h". Như bạn có thể tưởng tượng, việc sử dụng tên tập tin stdafx.h đơn giản chỉ là một quy ước; bạn có thể thay đổi tên nếu bạn rất muốn.
Trong Visual Studio 2010, thiết lập này được điều khiển từ giao diện thông qua Click chuột phải vào một dự án CPP, chọn 'Properties' và điều hướng đến "Configuration Properties C / C ++ biên dịch sẵn Headers". Đối với các phiên bản khác của Visual Studio, các vị trí trong giao diện sẽ khác nhau.
Lưu ý rằng nếu bạn vô hiệu hóa tiêu đề biên dịch sẵn (hoặc chạy dự án của bạn thông qua một công cụ mà không hỗ trợ chúng), nó không làm cho chương trình của bạn bất hợp pháp; nó chỉ đơn giản có nghĩa là công cụ của bạn sẽ biên dịch tất cả mọi thứ từ đầu mỗi lần.
Nếu bạn đang tạo ra một thư viện không phụ thuộc Windows, bạn có thể dễ dàng nhận xét ra hoặc loại bỏ # bao gồm từ các tập tin stdafx.h. Không cần phải loại bỏ các tập tin cho mỗi gia nhập, nhưng rõ ràng bạn có thể làm như vậy là tốt, bằng cách tắt các tiêu đề tiền biên dịch thiết lập ở trên.
đang được dịch, vui lòng đợi..
