목록KFGD (21)
신입 게임 개발자의 프로그래밍 일기
[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)#1 C++을 배우면서 메모리에 대해 이야기하지 않을 수 없겠죠? 이번 포스팅에서 이야기의 주제는 아래 3가지입니다. -물리적 메모리(Physical Memory)와 가상 메모리(Virtual Memory) -기본적인 메모리 관리 함수: malloc과 free -클래스를 위한 메모리 관리 함수: new와 delete [물리적 메모리(Physical Memory)와 가상 메모리(Virtual Memory)) 우리는 물리적 메모리가 뭔지를 알고 있습니다. 컴퓨터 구입 및 조립 시, 포함되는 RAM이라는 메모리가 그것입니다. 그런데 왜 지금 이 포스팅에서는 메모리를 물리적 메모리라는 다른 용어로 표현하고 있는 걸까요? 그 이유는 프로그래밍에서..
아래의 기술들은 C++ 입문자에서 벗어나기에서 메모리(Memory) 포스팅을 준비하여 조사한 기술들입니다.이 포스팅에서 자세하게까지는 설명하지 않고 이러한 기술들이 있다는 정도의 간단한 설명 정도만 적어놓았습니다.잘못된 정보가 있다면 언제든 지적해주시면 감사하겠습니다. 오버레이(Overlay)(목표)-물리 메모리보다 큰 프로세스를 동작시키기 위해 사용하는 기술(기술 개요)-전체 프로그램을 몇 개의 모듈들로 나누어 컴파일하고 수행시점에 필요한 모듈만을 메모리로 적재하여 사용한다.(부연 설명)-오버레이 기술은 운영체제로부터 어떤 특별한 지원을 받지 않습니다. 운영체제의 도움이 없기 때문에 프로그래머는 오버레이 기술을 적용할 프로그램의 모든 구조를 완전히 이해하고 있어야만 하는데 그 이유는 프로세스가 실행되는..
[C++ 입문자에서 벗어나기]Chapter_3: 빌드(Build)#2 원래 계획대로는 링크 단계의 세부과정인 심볼 해석(Symbol Resolution)과 재배치(Relocation)에 대해 이야기해보려 했으나 이 이야기는 추후 시스템 프로그래밍이라는 다른 카테고리에서 해야할 것 같습니다. 이것들에 대한 세부 이야기보다는 아래와 같은 정보를 이야기하는 것이 보다 C++ 입문자에서 벗아나기 포스팅에 적합하다고 판단하였습니다. -정적 링킹(Static Linking)과 정적 라이브러리(Static Library)-동적 링킹(Dynamic Linking)과 공유 라이브러리(Shared Library)-묵시적인 로드타임 링킹(Implicit load-time linking)과 명시적인 런타임 링킹(Explici..
Why base class destructor (virtual) is called when a derived class object is deleted? https://stackoverflow.com/questions/3261694/why-base-class-destructor-virtual-is-called-when-a-derived-class-object-is-del 이유는 간단히 말하면 This is by design(원칙입니다.)C++에서 각 클래스 별 멤버 변수의 메모리 해제는 각 클래스 내에서만 처리하도록 원칙을 두고 있습니다.
[C++ 입문자에서 벗어나기]Chapter_3: 빌드(Build)#1 이번 포스팅부터는 빌드에 대해 이야기해보겠습니다.빌드는 IDE에 익숙한 몇몇 저와 같은 초심자들에게는 그냥 지나가는 단계였습니다.(그냥 VisualSutdio에서 빌드 버튼 누르면 알아서 모든 단계가 진행되기 때문이죠...)그냥 지나치던 빌드라는 과정에 대해서 좀 파해쳐보려고 합니다. [빌드(Build)란?]이전 포스팅에서 다뤘던 것처럼 빌드는 최종적으로 실행바이너리를 생성하기 위한 일련의 과정입니다.이 과정은 3단계로 나뉘는데 그것들은 전처리, 컴파일, 링크 단계입니다.곧바로 전처리 단계에 대해 이야기 해보겠습니다. [전처리 단계]전처리문이라는 용어에 들어본 적이 있으실 겁니다.없으시다면 #include 이 지시문은 어떠신가요?이 키..
[C++ 입문자에서 벗어나기]Chapter_2: 선언과 정의#3 이번 포스팅은 선언에 대해서 이야기해보겠습니다.선언은 "어떤 객체가 있음을 알림"이라고 선언과 정의#1 포스팅에서 말한 적이 있습니다.이제 왜 그런지를 설명해드리겠습니다. [빌드: 링커 단계] 빌드는 소스 파일(.cpp)들이 실행 바이너리(.exe, .so ...) 가공되는 과정이라고 생각하시면 됩니다.왜 갑자기 빌드에 대한 이야기를 꺼냈느냐하면...선언에 대해서 이야기할 때 빌드의 3단계들 중 링크 단계를 함께 설명하는 것이 보다 이해하기 용이하다고 판단해서입니다.링크 단계는 빌드의 3단계 중 최종 단계로 컴파일(빌드 2단계)의 결과물들인 오브젝트 파일(.o)들을 적절히 연결해서 빌드의 최종 결과물인 실행 바이너리를 만들어내는 단계입니다...