Day3
운영체제, 윈도우즈
- 뇌를 자극하는 윈도우즈 시스템 프로그래밍
- 제프리 리처의 Windows via C++
CRT 라이브러리
C Run-Time Library
new 생성자
내부적으로 malloc으로 구현돼있다
메모리 릭 보고 해석하기
호출 스택은 프링글스통
int *Pointer = new int;Q. 좌측 값인 포인터 변수는 릭이 아닌가요?A. 포인터 변수는 스택에 쌓이기 때문에 자동으로 해제됩니다. 우측 값이 (동적할당할 경우에만) 힙에 쌓이기 때문에 메모리 유출이 발생합니다.malloc
프로그램 실행 중(runtime)에 원하는 메모리 크기를 힙 영역에 할당해주는 함수. 코드 작성 당시에 정확히 얼마만큼의 메모리가 필요한지 알 수 없을 때 사용.
#include <stdlib.h>void* malloc(size_t size); // 매개변수로 할당할 메모리의 크기를 넘김// 반환형이 void 포인터인 이유: 할당받은 메모리를 몇 바이트씩 잘라 사용할지는 매번 다르기 때문에 사용자가 형변환 후 사용하면 되기 때문int main() { char *c = (char*)malloc(1); // 1byte 메모리를 char 타입 포인터에 할당한 뒤 그 주소값을 *c에 저장 *c = 'h'; // c의 값에 'h' 초기화 printf("%d, %c\n", c, *c) // c의 주소값, c의 값 출력 free(c) // c의 메모리 해제}Reference
// Call by value: 값으로 호출(값만 복사됨)void Increment(int value){ ++value;}// Call by reference: 참조로 호출// 참조 = 주소 -> 주소 값 복사void Increment(int *value){ ++(*value);}// 위와 똑같음void Increment(int& value){ ++value;}객체지향
만능이 아니다. 보통 객체는 데이터를 비효율적으로 저장하는데, 속도와 성능을 중요시하는 현시점에서 도전을 많이 받음
Value Reference

L-Value Reference
- L-Value Reference는 L-Value를 참조한다(R-Value 참조 못함)
R-Value Reference
- R-Value Reference는 R-Value를 참조한다(L-Value 참조 못함)
- 날아갈게 확정인 값을 왜 참조하지?
- R-Value Reference는 임시 값을 다른 어딘가에 저장하는 목적으로 활용된다. 이 때 값을 복사하는 대신 이동(Move)하는 방법으로 속도를 향상시킬 수 있다
- 자료구조 알고리즘 작성할 때 많이 씀
const 상수는?
- L-Value이긴 하나 수정 불가능하므로 Immutable L-Value(xvalue)라 한다
템플릿과 구조체? 벡터?
Template
TS의 제네릭과 동일개념. 클래스 또는 함수의 명세를 일반화할 수 있고 사용할 때마다 인스턴스별로 주입할 수 있게 하는 개념
- typename == class, 혼용만 안하면 됨(출처)
Struct
Vector
| 구분 | std::vector | 수학 벡터 | 게임 벡터 |
|---|---|---|---|
| 의미 | std 컨테이너, 동적 배열 | 크기(magnitude)와 방향(direction)을 가지는 대상(?) | 수학적 벡터를 실시간 시뮬레이션에 맞게 구현한 도구 |
| 크기/방향 | X | O | O |
| 좌표 | X | O | O |
| 연산 | push/pop | 내적/외적 | 이동/회전 |
| 주 사용처 | 알고리즘 | 이론 | 게임 로직 |
memset
memset은 메모리 블록을 특정 값으로 초기화(채움) 하는 표준 C 라이브러리 함수입니다.
배열과 포인터
int* ap;ap++ // 숫자 1증가가 아닌 int(4byte) 증가(ap + 1) // 위와 동일물리 기반 렌더링
https://lifeisforu.tistory.com/category/PBR%28Physically%20Based%20Rendering%29
전위 후위 증감 연산자 차이
후위 증감 연산자는 임시로 들고 있을 메모리 공간이 필요함 근데 이것도 컴파일러가 개선되면서 전후위 차이가 없어짐
문자열
ASCII
대문자와 소문자 Decimal 차이는 32
char
문자 하나용 타입.
char타입은 숫자다.
1byte 짜리 저장공간. 컴퓨터는 문자를 모른다
3D 업계
openGL = 오른손 좌표계 DirectX = 왼손 좌표계(언리얼, 유니티)

왼손 오른손에 유불리는 없다 z-up 장점: 물리 계산 편함((역)기구학(inverse-kinematics): A동작에서 B동작으로 움직이게 하고 싶을 때 역계산) y-up 장점: 인간에게 편함
string
연속으로 저장된 char 문자의 집합
언리얼은 UTF-8로 문자 인코딩을 함. VS는 독자규격인 cp949를 씀. 그래서 주석이 언리얼 에디터에서 깨질 수 있으니 UTF-8 인코딩으로 바꿔 저장해줘야 함
bool
C언어에서 T/F는 0이냐 아니냐임. 매크로로 TRUE = 1 / FALSE = 0 작성했던게 C++등으로 옮겨지면서 굳어진 것, 핵심은 0인지 아닌지