컴파일 시간을 크게 줄여주는 사전 컴파일된 헤더, PCH ( Visual C++ )

2026. 2. 18. 21:26·TIL(Today I Learn)/TIL

PCH(Precompiled Header) 개요

  • C/C++은 각 .cpp(translation unit) 를 컴파일할 때, #include로 포함된 헤더를 매번 전처리/파싱/템플릿 처리한다.
  • 프로젝트가 커질수록 <windows.h>, STL, MFC/ATL, 대형 3rd-party 헤더 때문에 헤더 해석 비용이 빌드 시간을 크게 잡아먹는다.
  • PCH를 쓰면, 여러 .cpp에서 반복되는 헤더 처리 비용을 미리 컴파일해둔 결과(.pch)를 재사용해 줄일 수 있다.
  • Visual Studio 기본 PCH 파일명:
    • 최신 템플릿: pch.h / pch.cpp
    • VS 2017 이전(레거시): stdafx.h / stdafx.cpp

stdafx.h / pch.h는 “특수한 헤더”가 아니다

  • stdafx.h(또는 pch.h)라는 이름 자체에 특별한 기능이 있는 건 아니다.
  • MSVC가 프로젝트 설정(/Yc, /Yu 등) 으로 “이 헤더를 기준으로 PCH를 생성/사용”하도록 연결해둔 관례적인 파일명이다.
  • 따라서:
    • 파일명 변경 가능
    • 어떤 헤더를 PCH로 삼을지도 변경 가능
      → 단, 설정도 함께 수정해야 한다.

 

아래 사진은 MSVC 환경에서 "프로젝트 속성 > C/C++ > 미리 컴파일된 헤더"에서

  • 미리 컴파일된 헤더를 사용(/Yu)로
  • 미리 컴파일된 헤더 파일을 pch.h로 수정한 모습니다. (원래는 stdafx.h)
    • 프로젝트 및 VC 환경에 따라 기본값이 다를 수 있다.


사용 방법(기본 패턴)

  1. 거의 모든 .cpp에서 공통으로 쓰는 헤더를 pch.h(또는 stdafx.h)에 모아둔다.
  2. pch.cpp(또는 stdafx.cpp)에 아래처럼 include 1줄을 둔다.
  3. 이 파일을 기준으로 MSVC가 .pch를 생성하고, 다른 .cpp들은 그 결과를 재사용한다.

무엇을 pch.h에 넣을까? (가이드)

  • ✅ 넣기 좋은 것: 안정적인(stable) 헤더
    • 예: <vector> 같은 STL, 자주 안 바뀌는 시스템/플랫폼 헤더
  • PCH는 pch.h(및 그것이 include하는 파일들)가 바뀔 때만 다시 만들어진다.
  • ⚠️ 자주 바뀌는 헤더를 넣으면:
    • PCH가 자주 재생성되고
    • 결과적으로 전체 리빌드가 늘어나 시간이 더 오래 걸릴 수 있다.

예시 코드

pch.h (또는 stdafx.h)

#pragma once

// 자주 안 바뀌는(Stable) 헤더들만 넣는 게 핵심
#include <iostream>
#include <vector>
#include <string>

// Windows 프로젝트라면 흔히 넣음(프로젝트 성격에 따라)
// #define WIN32_LEAN_AND_MEAN
// #include <windows.h>

pch.cpp (또는 stdafx.cpp)

#include "pch.h"
// 이 파일이 보통 "Create (/Yc)" 담당

'TIL(Today I Learn) > TIL' 카테고리의 다른 글

바이브 코딩 중인 내가 쓰는 Agent Skills - 260611  (0) 2026.06.02
구조체 패킷의 한계와 직렬화 버퍼(Serialization Buffer)가 필요한 이유  (0) 2026.02.19
메모리 풀과 프리리스트 – 고정 크기 객체의 Alloc/Free를 빠르게 만드는 방법  (0) 2026.02.19
링버퍼(Ring Buffer) - 원활한 통신을 위한 자료구조  (0) 2026.02.19
NHN 코딩테스트 후기  (0) 2023.08.12
'TIL(Today I Learn)/TIL' 카테고리의 다른 글
  • 구조체 패킷의 한계와 직렬화 버퍼(Serialization Buffer)가 필요한 이유
  • 메모리 풀과 프리리스트 – 고정 크기 객체의 Alloc/Free를 빠르게 만드는 방법
  • 링버퍼(Ring Buffer) - 원활한 통신을 위한 자료구조
  • NHN 코딩테스트 후기
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • C#
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 코딩테스트(C++)
      • TIL(Today I Learn) N
        • TIL N
      • 강의
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • CS
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 기타
        • Python
        • 알고리즘
        • 프로젝트 회고
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
컴파일 시간을 크게 줄여주는 사전 컴파일된 헤더, PCH ( Visual C++ )
상단으로

티스토리툴바