C++/[AssortRock] C++ 기초 다지기

CPP_1. AssortRock 3일차 오프라인 수업_220907

헛둘이 2022. 9. 8. 15:19
클라이언트 프로그래머의 고비에 대한 이야기
  • C에서 맞닥뜨리는 포인터
  • C++에서는 클래스
  • 그 후 자료구조 알고리즘
  • 그리고 DirectX의 렌더링 파이프라인

 

서버 프로그래머의 고비에 대한 이야기
  • 서버 프로그래머는 렌더링 파이프라인 대신 멀티 스레드 프로그래밍이 고비
  • 여러 유저들이 동시 접속하기 때문에 동시에 처리되어야 하는 문제들이 있어서, 디버깅이 매우 어렵다.
  • 멀티 스레드 외에 멀티 프로세스라고 실제로 프로그램을 여러 개 실행하는 방법이 있는데,
  • 멀티 스레드 프로그래밍보다 비효율적이다.
  • 그래서 서버 프로그래머의 경우 디버깅이 어렵기 때문에 콘솔창에 상태 로그를 띄워서 모니터링하고
  • 그 모니터링을 보며 버그나 문제점을 체크한다.

 

커리큘럼 진도, 속도에 대한 이야기
  • 지금 공부하는 것들의 진도나 양이 빠듯하게 느껴질 수 있는데, 개인적으로 시간을 많이 투자해서 연습해야 한다.
  • (내주시는 숙제 등등..)
  • 이후에 API나 DIRECT2D, 3D 할때는 숙제가 없고 이렇게 하나 하나 테스트하면서 해 볼 시간이 없다.

 

2차원 배열에 대한 이야기
  • 배열의 배열을 만들고 싶을 때가 있다.
  • 그런 경우엔 int arr2[5][5]; 이런 식으로 만들면 된다.
  • int형 5개의 배열이 다시 5개가 모인 배열이라는 뜻이다.

 

스택 오버플로우에 대한 이야기
  • 스택 오버플로우는 스택이 넘치는 현상을 말한다.
  • 대표적으로 재귀함수를 사용할 때 종료조건을 만들지 않으면 발생한다.

 

스택 메모리에 대한 이야기
  • 스택 메모리의 크기는 기본값 1MB이며,
  • 프로젝트 속성 -> 링커 -> 시스템 -> 스택 예약 크기를 이용해서 설정해줄 수 있다.

 

디버그, 릴리즈모드에 대한 이야기
  • 디버그모드로 프로그램을 만들면 더 큰 크기의 프로그램이 생성된다.
  • 디버그모드일 때 프레임이 잘 안나올 때가 있다.
  • 프레임 : 초당 화면 갱신 횟수
  • 이 때 릴리즈 모드로 바꿔주면 프레임이 잘 나온다.
  • 릴리즈모드는 디버그모드에 비해 최적화옵션이 있어서 더 최적화됨

 

 

렌더링에 대한 이야기
  • 로직이 실행된 후 다시 화면에 그려주는 것을 렌더링이라고 한다.

 

물리 처리에 대한 이야기
  • 물리 처리의 경우 로직에 넣기보단 로직 다음에 처리하던지 렌더링 후에 처리하던지 한다.
  • 왜냐하면 물리 처리 자체가 무겁기 때문

 

 

재귀함수에 대한 이야기
  • 함수 내부에서 다시 자기 자신을 호출하는 함수
  • 종료 조건을 설정해주어야 함
  • DFS라고 해서 트리나 그래프 순회할 때 사용한다.

 

문자에 대한 이야기
  • 1바이트면 영여는 문제 없이 저장이 가능하다. (256가지 2^8승)
  • 하지만 한글은 경우의 수가 많기 때문에 1바이트로는 감당할 수 없다.
  • 그래서 멀티바이트를 사용한다 (멀티바이트는 1바이트와 2바이트를 혼용)
  • wchar_t는 2바이트 문자도 저장 가능하다.(특수문자 같은 것들도 저장할 수 있다.)

 

대문자를 소문자로 바꾸고 싶을 경우
  • 아스키 코드를 활용하면 변경 가능하다.
  • 대문자에 32를 더하면 소문자가 된다.
  • 대소문자 판별의 경우는 if (ch2 >= 'A' && ch2 <= 'Z')로 응용 가능

 

포인터에 대한 이야기
  • 메모리는 메모리 고유의 주소가 있다.
  • 주소를 저장하고 싶을 때는 포인터 변수를 사용한다.
  • 포인터 변수는 어떤 자료형이던 간에 4바이트 안에 주소값을 저장할 수 있다.
  • C++의 장점은 주소값을 받아서 연산해줄 수 있는 것.
  • 대신 사용하기 어렵기 때문에 자바나 C#은 포인터 변수를 없애버렸다.(가비지컬렉터)
  • 배열의 이름은 배열의 0번째 원소다.
  • 어떤 자료형을 포인터 변수에 저장할 때는 그 포인터 변수의 타입을 자료형과 맞춰주어야 한다.
  • *(별)을 찍으면 그 포인터 변수가 가리키고 있는 주소의 값에 접근한다.

 

포인터 연산
  • 포인터 변수 앞에 별(*)을 찍으면 역참조 한다는 뜻으로 그 메모리 주소에 접근하여 값을 꺼내 온다.
  • 포인터 변수에 1을 더해주면 그 포인터가 가리키는 자료형만큼 이동한다.

 

32비트 운영체제에 대한 내용
  • 32비트 운영체제에서는 4GB를 초과해서 인식할 수 없다.
  • 한 번에 처리할 수 있는 데이터의 양이 4GB가 한계기 때문에 램도 4GB밖에 사용할 수 없다.
  • 운영체제의 Bit의 크기는 CPU가 처리할 수 있는 최대 크기이다.