`
JavaFans
  • 浏览: 87268 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++编译时间、PCH、stdafx.h

阅读更多
这段时间集中解决了一个stdafx的问题, 一点零散总结

  预编译头文件(扩展名为.PCH)是把一个工程中较稳定的代码预先编译好放在一 个中间形式的文件中(PCH文件),编译器可以更加快捷的使用这个文件,减少编译时间。预先编译好的代码可以是任何的C/C++代码。

预编译头文件的目的就是提高编译速度。编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西。在比较大的C/C++程序中,这些头文件中所包括的东西往往很大,编译时间很长。其中一部分头文件不常被修改,为了减少因为修改A文件而去编译没有任何修改的B头文件,将B头文件加入PCH文件中,避免重复编译。

一般情况下,预编译头文件使用stdafx.h和stdafx.cpp;当然也可以用其他的文件名。具体方法如下:
1. 在项目属性中定义Create/Use Precompiled Header: Use Precompiled Header(/Yu),并指定Create/Use PCH Through File 为 stdafx.h
2. 修改stdafx.cpp的编译属性,Create/Use Precompiled Header: Create Precompiled Header (/Yc), Create/Use PCH Through File 指定为stdafx.h。

预编译头文件应当只include大的并且影响编译速度的头文件。最典型的就是windows.h,还包括STL头文件。 自己编写的的头文件一般来说不应当被include在stdafx.h中,因为变化很频繁。例外情况是,某些头文件基本稳定而且在很多文件中被include。

#define of WIN32_LEAN_AND_MEAN。WIN32_LEAN_AND_MEAN的目的就是减少Windows.h以及其所包含的头文件中那些老版本的,不常用的部分。

将source文件(特别是大量的小文件)用include指令合并到少量的几个文件,然后编译这个文件会减少编译时间。

预编译代码:
自动预编译和手动预编译:http://msdn.microsoft.com/en-us/library/2yzw0wyd%28vs.71%29.aspx








分享到:
评论
2 楼 JavaFans 2010-04-04  
mikeandmore 写道
没有提pch一定要在第一行include。。。
没有提pch什么时候速度提高最大。。。
某些东西用了pch和没用编译速度没什么区别,有些则是本质区别。
我的经验是有模版的时候用pch会快很多。像boost,gtkmm这种库。

谢谢楼上提醒::D
1. 在第一行#include "stdafx.h"是必须的,编译器也会报错
2. 一般都是对于长期不变的,频繁include的头文件添加到PCH中,其他的不应该放到里面,boost肯定是很好的例子。

1 楼 mikeandmore 2010-04-04  
没有提pch一定要在第一行include。。。
没有提pch什么时候速度提高最大。。。
某些东西用了pch和没用编译速度没什么区别,有些则是本质区别。

我的经验是有模版的时候用pch会快很多。像boost,gtkmm这种库。

相关推荐

    StdAfx.h头文件下载,编程必备!

    编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,...

    C++ 可以解决64位程序调用32位库、双向信道跨进程间通信的文件映射处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ zip、zip压缩文件处理等压缩文件处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ 抓取网页数据,解析网页数据等HTTP处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ gbk转unicode、ansi转unicode,字符串查找、切割、转十六进制、转二进制、转义,随机数等数据处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ 复制路径下文件、复制多级子路径下文件、删除路径、删除多级子路径等路径处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ json、json字符串处理等json解析类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ sm2、sm3、sm4、rsa、crc、md、sha、des等加密算法类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    C++ 文件写入、读取,ini写入、读取,xml写入、读取等文件处理类源码

    友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预...

    Linux中gdb查看core堆栈信息

    预编译头的使用: 要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的 代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件) 想必大家都知道 StdAfx.h这个文件。...

    C++中的万能头文件.md

    在Visual Studio中,这种预编译头文件通常命名为`stdafx.h`或`pch.h`,并在源代码文件的开始处使用`#include "stdafx.h"`或`#include "pch.h"`来包含它。 但请注意,这种做法并不适用于所有项目或所有编译器。一些...

    利用opencv 完成camshift+ kalman

    控制台应用程序:camshift_kalman 项目概述 本文件概要介绍组成 camshift_kalman 应用...StdAfx.h, StdAfx.cpp 这些文件用于生成名为 camshift_kalman.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。

    终于搞懂了,预编译头文件

    以 <br>下是注意事项: <br>1):如果使用了/Yu,就是说使用了预编译,我们在每个.cpp文件的最开头,我强调一遍 <br>是最开头,包含 你指定产生pch文件的.h文件(默认是stdafx.h)不然就会有问题。...

    C++俄罗斯方块控制台带颜色

    VS2017以上可运行,仅共学习使用。版权侵删 // stdafx.cpp : 只包括标准包含文件的源文件 // 俄罗斯.pch 将作为预...#include "stdafx.h" // TODO: 在 STDAFX.H 中引用任何所需的附加头文件, //而不是在此文件中引用

    C++单双游戏

    StdAfx.h、StdAfx.cpp 这些文件用于生成名为 GameServer.pch 的预编译头(PCH)文件以及名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准的头文件,它定义了新的资源 ID。 Microsoft Visual C++ 读取和...

    公式分析器

    StdAfx.h、StdAfx.cpp 这些文件用于生成名为 ExpressionProcess.pch 的预编译头 (PCH) 文件以及名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准的头文件,它定义了新的资源 ID。 Microsoft ...

    计算机病毒与木马程序设计剖析- 修改系统文件(源代码)

    修改系统文件 modifyfile.vcproj 这是使用“应用程序向导”生成的 VC++ 项目...StdAfx.h、StdAfx.cpp 这些文件用于生成名为 modifyfile.pch 的预编译头 文件 (PCH)和名为 StdAfx.obj 的预编译类型文件。 Resource.h

    卡内基梅隆大学ssd6的部分答案

    StdAfx.h, StdAfx.cpp 这些文件用于生成名为 1-1.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。 ///////////////////////////////////////////////////////////////////////////// 其他注释: ...

    TextDetect.rar

    StdAfx.h, StdAfx.cpp 这些文件用于生成名为 TextDetect.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。 ///////////////////////////////////////////////////////////////////////////// 其他...

    如何如写ini

    <br/>///////////////////////////////////////////////////////////////////////////// 其他标准文件: <br/>StdAfx.h, StdAfx.cpp 这些文件用于生成名为 Win32.pch 的预编译头(PCH)文件 ...

Global site tag (gtag.js) - Google Analytics