신입 게임 개발자의 프로그래밍 일기
[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)들을 적절히 연결해서 빌드의 최종 결과물인 실행 바이너리를 만들어내는 단계입니다...
[C++ 입문자에서 벗어나기]Chapter_2: 선언과 정의#2 이번 포스팅에서는 "초기화된 전역 변수와 초기화되지 않은 전역 변수"에 대해서 다뤄볼 생각입니다. [초기화된 전역 변수와 초기화되지 않은 전역 변수] 아래의 코드를 봐주시길 바랍니다. 전역 변수 형태로 총 4개의 변수들이 정의되어 있습니다.우리는 이미 이전 포스팅에서 전역 변수가 자동 초기화가됨을 알고 있습니다.위 코드를 실행 시키면 0057이라는 출력값이 나오게 된다는 것은 쉽게 알 수 있겠죠. 그런데 위 전역 변수들은 C++의 어느 가상 메모리 영역에 위치하게 될까요? g_C는 확실하게 Data영역에 위치할 것 같습니다.5라는 상수로 변수를 초기화하는 정의문을 가지고 있으니까요 그렇다면 나머지 3개는 어떨까요?먼저, g_A에 대해 이야기..
https://stackoverflow.com/questions/8721475/if-a-global-variable-is-initialized-to-0-will-it-go-to-bss 결론: GCC에서는 기본적으로 -fzero-initialized-in-bss 옵션이 주어져서 0으로 초기화할 경우, BSS영역에 저장되지만임의적으로 -fno-zero-initialized-in-bss 옵션을 주면 Data영역에 저장이 가능하다.
[C++ 입문자에서 벗어나기]Chapter_2: 선언과 정의#1 이전 포스팅까지는 Chapter_1: 타입(Type)에 대해 이야기했었는데 이번 포스팅부터는 선언과 정의에 대해 이야기해보려고합니다.개인적으로는 선언과 정의에 대해 무시하면서 IDE(통합개발환경, Integrated Development Environment)의 편리함에기대어 코딩을 해왔었는데 "Fundamental C++ 프로그래밍 원리"에 선언과 정의 부를 읽으며 여러 생각을 하게 되었습니다. [선언과 정의] 저는 일반적으로 선언과 정의에 대해 이야기해보라 하면 아래와 같이 이야기했을 겁니다. 선언: 어떤 객체가 있음을 알림정의: 어떤 객체를 위한 메모리 영역을 확보 정의는 객체를 이용하기 위해서 필수적인 절차이지만선언이 왜 따로 구분이..
[C++ 입문자에서 벗어나기]Chapter_1: 타입(Type)#3 이번 포스팅에서는 문자와 문자열 그리고 typedef 사용법에 대해서 이야기해 볼 것입니다. 더불어 참조타입에 대해서도 이야기하겠지만 간단히 언급만하고 넘어가겠습니다. 참조타입은 추후에 자세히 이야기하겠습니다. [문자 타입] C/C++에서 기본적으로 문자들을 표현하기 위해서 char 타입을 사용해왔습니다. 이 char 타입은 ASCII 인코딩 방식을 사용하여 문자들을 비트 상태들과 대응시키는데 우선, ASCII에 대해서 간단히 살펴봅시다. [ASCII & 멀티바이트 문자 집합(MBCS)] ASCII는 영문 알파벳을 디지털화시키기 위해 사용되는 대표적인 7비트 문자 인코딩입니다. 7비트를 사용하는 ISO/IEC 646 나 8비트를 사용하는..