목록C++ 입문자에서 벗어나기 (14)
신입 게임 개발자의 프로그래밍 일기
[C++ 입문자에서 벗어나기]Chapter_5: 포인터와 배열 이번 포스팅의 주제는 포인터와 1차원 배열입니다.기본적인 내용들은 생략하고 이것들에 대해 흔히 범할 수 있는 실수나 착각들에 대해서 이야기해보려고 합니다.이번 포스팅에서 다룰 질문들은 아래에 나열된 두가지입니다. Q1: 포인터와 1차원 배열은 완벽하게 바꾸어 사용할 수 있다?Q2: int (*pArr)[2]와 int *arr[2]의 차이는? (feat. right-left rule) [Q1: 포인터와 1차원 배열은 완벽하게 바꾸어 사용할 수 있다?] 소제목에서 추측할 수 있으시겠지만 포인터와 1차원 배열은 대부분의 경우에서 호환이 됩니다.하지만 이 둘에게는 분명한 차이가 존재합니다.설명을 위해 예시 코드를 보여드리고 시작하겠습니다. 위 코드는..
[C++ 입문자에서 벗어나기]Chapter_4: 메모리(Memory)#4 - 2 [new 재정의시 유의사항: 이름 가림] void* operator new(std::size_t count) throw(bad_alloc); void* operator new(std::size_t count, const std::nothrow_t&) throw(); void* operator new(std::size_t count, void* ptr) throw(); 이전 포스팅에서 C++ 표준에서 제공하는 new는 세가지 형태가 있다는 것을 알고 있으실 겁니다.만약 이 중 하나만을 재정의하고 나머지를 기존 형태 그대로 쓰고 싶은 경우, 혹은 기존에 제공하는 형태가 아닌 새로운 형태(다른 파라미터로 동작하는)의 new를 추가..
[C++ 입문자에서 벗어나기]Chapter_4: 메모리(Memory)#4 - 1 여러분도 아시다시피 new는 재정의할 수 있습니다.하지만 이 new를 재정의할 때도 따르는 관례들이 있다는 것을 알고 계셨나요?이번 포스팅에서는 이 관례들에 대해서 이야기해보려고 합니다. [new와 delete를 재정의할 때 따르는 관례들] 먼저 new를 재정의(Overloading)해봅시다! std::bad_alloc을 던지는 new를 전역 범위와 클래스 전용 두가지로 오버로딩 해보았습니다.실행시켜보면 정상적으로 문장 두개가 출력되는 것을 확인할 수 있습니다.그런데 위 코드는 C++ 표준에서 권고하는 관례(가이드라인)에 적합한 new가 아닙니다. 1. 크기가 없는, 즉 0바이트 메모리 요청에 대한 대비를 할 것2. 가용 메..
[C++ 입문자에서 벗어나기]Chapter_4: 메모리(Memory)#3 void* operator new(std::size_t count) throw(bad_alloc); void* operator new(std::size_t count, const std::nothrow_t&) throw(); void* operator new(std::size_t count, void* ptr) throw(); 이전 포스팅에서 'std::bad_alloc을 던지는 첫번째 new'에 대해 알아봤으니 이번 포스팅에서는 '예외를 던지지 않는 new'와 'placement new(위치 지정 new)'에 대해 알아보겠습니다. [예외를 던지지 않는 new] std::bad_alloc 예외를 던지는 new와 예외를 던지지 않는 ..
[C++ 입문자에서 벗어나기]Chapter_4: 메모리(Memory)#2 2018년에 작성하는 첫 포스팅입니다.이번 포스팅에서는 new와 관련된 활용에 대해 이야기해보겠습니다.먼저 new의 Syntax를 살펴봅시다! void* operator new(std::size_t count) throw(bad_alloc); void* operator new(std::size_t count, const std::nothrow_t&) throw(); void* operator new(std::size_t count, void* ptr) throw(); 맨 처음 new는 일반적으로 가장 많이 사용하는 new의 형태입니다.두번째 new는 책(C++기초 플러스 5판, Effective C++ 3판)에서위치 지정 new라고..
[C++ 입문자에서 벗어나기]Chapter_4: 메모리(Memory)#1 C++을 배우면서 메모리에 대해 이야기하지 않을 수 없겠죠? 이번 포스팅에서 이야기의 주제는 아래 3가지입니다. -물리적 메모리(Physical Memory)와 가상 메모리(Virtual Memory) -기본적인 메모리 관리 함수: malloc과 free -클래스를 위한 메모리 관리 함수: new와 delete [물리적 메모리(Physical Memory)와 가상 메모리(Virtual Memory)) 우리는 물리적 메모리가 뭔지를 알고 있습니다. 컴퓨터 구입 및 조립 시, 포함되는 RAM이라는 메모리가 그것입니다. 그런데 왜 지금 이 포스팅에서는 메모리를 물리적 메모리라는 다른 용어로 표현하고 있는 걸까요? 그 이유는 프로그래밍에서..
[C++ 입문자에서 벗어나기]Chapter_3: 빌드(Build)#2 원래 계획대로는 링크 단계의 세부과정인 심볼 해석(Symbol Resolution)과 재배치(Relocation)에 대해 이야기해보려 했으나 이 이야기는 추후 시스템 프로그래밍이라는 다른 카테고리에서 해야할 것 같습니다. 이것들에 대한 세부 이야기보다는 아래와 같은 정보를 이야기하는 것이 보다 C++ 입문자에서 벗아나기 포스팅에 적합하다고 판단하였습니다. -정적 링킹(Static Linking)과 정적 라이브러리(Static Library)-동적 링킹(Dynamic Linking)과 공유 라이브러리(Shared Library)-묵시적인 로드타임 링킹(Implicit load-time linking)과 명시적인 런타임 링킹(Explici..
[C++ 입문자에서 벗어나기]Chapter_3: 빌드(Build)#1 이번 포스팅부터는 빌드에 대해 이야기해보겠습니다.빌드는 IDE에 익숙한 몇몇 저와 같은 초심자들에게는 그냥 지나가는 단계였습니다.(그냥 VisualSutdio에서 빌드 버튼 누르면 알아서 모든 단계가 진행되기 때문이죠...)그냥 지나치던 빌드라는 과정에 대해서 좀 파해쳐보려고 합니다. [빌드(Build)란?]이전 포스팅에서 다뤘던 것처럼 빌드는 최종적으로 실행바이너리를 생성하기 위한 일련의 과정입니다.이 과정은 3단계로 나뉘는데 그것들은 전처리, 컴파일, 링크 단계입니다.곧바로 전처리 단계에 대해 이야기 해보겠습니다. [전처리 단계]전처리문이라는 용어에 들어본 적이 있으실 겁니다.없으시다면 #include 이 지시문은 어떠신가요?이 키..