c++ 및 서버 환경 관련 내용 정리
✅ 1. 컴파일과 실행 최적화
- 디버그 vs 릴리즈
- 릴리즈에선 불필요한 코드 제거 및 최적화.
- 디버그에선 존재하던 코드가 릴리즈에서 사라질 수 있음.
- .pdb 파일: 소스코드와 기계어의 매핑 정보 포함 → 디버깅 시 중요.
- inline 최적화
- __inline만 강제 인라인 가능.
- 너무 과도한 인라인은 오히려 코드 부풀림.
- volatile: 최적화된 코드에서 예상 못한 제거를 방지하기 위한 키워드.
✅ 2. 시간/타이머 관리 (게임/서버 중심)
- 타이머 종류
- clock(): C 표준 함수, 초 단위.
- GetTickCount() / GetTickCount64(): 밀리초, 경량 호출.
- timeGetTime(): 더 정확한 시간(정밀도 설정 필요).
- QueryPerformanceCounter(): 고해상도, Frequency와 함께 사용.
- 정밀도 향상
- timeBeginPeriod(1) → 타이머 인터럽트를 1ms로 설정.
- 게임 서버는 이 설정이 필수. 일반 서버는 선택.
- 프레임 처리
- MMO: 10fps, RPG: 30fps, 일반적 서버: 60fps 이상.
- sleep(20 - 로직수행시간) 구조로 사용.
- 주의사항
- 고해상도 타이머는 멀티코어 환경에서 정확도 떨어질 수 있음.
- chrono는 C++ 표준 타이머 → 내부적으로 QueryPerformanceCounter 사용.
✅ 3. 메모리 구조 및 관리
- 메모리 영역
- 코드(.text), 데이터(.data), 힙, 스택 등.
- 동적 할당 흐름
- new → malloc → HeapAlloc → VirtualAlloc(4KB 페이지).
- 패딩 및 정렬
- 구조체 정렬은 변수 타입 기준.
- alignas(32)로 메모리 경계 지정.
- 에러 발생 조건
- 널 포인터 접근, 읽기 전용 메모리 쓰기, 할당되지 않은 영역 접근.
✅ 4. 함수 호출 규약
- 호출 규약 종류
- __cdecl: 호출자가 스택 정리 (가변 인자 사용 가능).
- __stdcall: 피호출자가 스택 정리 (WinAPI 기본).
- __fastcall: 레지스터를 최대한 활용.
- 인자 전달 순서
- 대부분 RTL (오른쪽 인자부터 전달).
- 리턴값은 기본적으로 eax를 통해 반환됨.
- 매크로 함수 문제 해결
- 매크로 내부에 do{}while(0) 사용 → 구문 오류 방지.
✅ 5. 디버깅 & 덤프 분석
- 덤프 파일 생성 방법
- 작업 관리자 > 프로세스 > 덤프 생성
- 덤프 분석
- .pdb와 소스코드가 있으면 주소 매핑 가능.
- Native Debug로 실행 시 전체 메모리 상태 확인 가능.
✅ 6. 랜덤/시간 관련 처리
- 난수 생성
- rand()는 의사 난수 → srand()로 시드 설정 필요.
- 보안성이 필요한 경우 rand_s() 또는 C++ random 권장.
- time(nullptr)를 시드로 사용 → 매번 다른 값 생성.
- 리플레이 구현
- 모든 상태를 저장하는 것이 아니라 입력과 시드만 저장해도 가능.
✅ 7. 기타 실전 팁
- switch-case 최적화
- 케이스 수가 많을 경우 → 점프 테이블 사용.
- 조건이 적으면 → if-else로 변환됨.
- 레지스터 구조
- rax > eax > ax > al/ah → 하위 8~64bit 활용.
- 문자열 파싱
- strtok() 사용 시 멀티스레드 환경에서는 사용 주의.
'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 04/29 TIL - 유니티 입문 강의 수강 (1) | 2025.04.29 |
|---|---|
| 04/28 TIL - 복습내용(시간 기반 서버 루프 / 메모리 디버깅) (0) | 2025.04.28 |
| 04/24 캠프 배치고사 및 복습 내용 (0) | 2025.04.24 |
| 04/23 TIL 인터페이스 클래스의 json 직렬화/역직렬화 (0) | 2025.04.23 |
| 04/22 TIL (0) | 2025.04.22 |