전체 글

C#, 유니티 게임 개발자
1. Pass by Value a 가 Pass by Value 되며 카피되면서 foo 에 a=0 이 들어가게 되고, 로컬변수 b는 a+1이니까 1이 들어가게 된다. 결국 값이 복사가 되는 것. 2. Pass by Pointer 함수에서 매개변수로 포인터를 받게 되면, 이 포인터는 함수 바깥에 있는 변수에 접근 가능하다! 만약 예를 들어서, fooP() 에 *ap = 100 을 써주게 되면 어떻게 될까? fooP가 동작할 때 a 공간에 접근을 해서 값을 100으로 바꿔주는 코드가 된다. (접근 가능!) 3. Call by Reference 레퍼런스를 받는 fooR() 함수를 만들어주고 콜 해 주는 코드를 짜 보자. 사실 포인터로 넘겨주는 함수와 레퍼런스로 넘겨주는 함수 두 개는 똑같다. Compiler E..
라이브러리: 이미 만들어진 코드나 바이너리를 가져와서 프로그래밍 할 때 사용할 수 있는 콜렉션. 대표적으로 Standard Library가 있다. 자주 사용하는 등이 이에 해당한다. 1. 라이브러리의 종류 1) Header only 일반적으로 코드를 받게 되면 헤더 안에 모든 게 정의되어 있어서 이 헤더를 include 하여 사용하는 경우를 말한다. 2) Static library 윈도우에서는 .lib 확장자, 리눅스에서는 .a 확장자로 나타난다. 이 라이브러리를 빌드 프로세스에서 가져와서 링크 시켜준다고 생각하면 된다.1 3) Dynamic library 로드 타임에 바인딩 할 수도, 런 타임에 바인딩 할 수도 있는 라이브러리. 로드 타임: 프로그램 실행될 때 로더가 프로세스를 실행시킬 때 라이브러리를..
extern, static은 c++ 빌드 프로세스에서 핵심적인 키워드이다. 두 키워드는 모두 링킹 linkage 프로세스와 관련이 되어 있다. extern: 바깥쪽에서 링크를 찾아라. static: 바깥쪽이 아닌 안쪽으로만 링크를 열어라. *c++에서는 이렇게 빌드 프로세스에서 사용되는 static 말고도 static 메모리를 사용하라는 static 키워드가 존재하니 헷갈리지 말자. *참고 cppreference의 static extern 의 linkage 파트 참고할 것. https://en.cppreference.com/w/cpp/language/storage_duration Storage class specifiers - cppreference.com The storage class specifie..
빌드 프로세스에서 가장 먼저 개입되는 부분. #include, #define, #ifdef ,#pragma once 등에 해당 https://en.cppreference.com/w/cpp/preprocessor Preprocessor - cppreference.com The preprocessor is executed at translation phase 4, before the compilation. The result of preprocessing is a single file which is then passed to the actual compiler. [edit] Directives The preprocessing directives control the behavior of the prepro..
c++ 빌드를 위해서 일반적으로 Header, cpp 파일로 나누는데, 그 이유는 무엇이고, 헤더 파일은 어떻게 사용하면 될까? 예제1: 잘못된 함수 호출 foo() 함수를 main() 아래로 내리면, main 함수는 foo()가 어디 있는지 알 수 없기 때문에 호출하지 못한다. 이 때 void foo()를 main 함수 위에 선언해주고 컴파일 해주면 해결된다. 위 부분을 선언 declaration 이라 하고, -즉 함수가 있음을 알려주고 아래 부분을 정의 definition/implementation 이라고 한다, -함수의 실제 내용을 채워주는 것이다. 만약 이처럼 foo()함수를 선언해준 다음 정의해주지 않는다면 linking error가 된다. 그림으로 보면, main.cpp 파일은 있고 컴파일에 ..
*C++의 특징 1) 헤더 파일, CPP 파일이 나누어져 있다. 2) static library, dynamic library, header only library 3) assembler, compilation, Linker C++ 빌드 프로세스 1. pre processor : 코드에서 #include, #define 과 같은 키워드를 찾아서 치환해준다. 프리 프로세서는 .h 파일을 .cpp 파일에 하나의 translation unit을 만들어 준다. 2. compiler : translation unit을 전부 가져와서 object file로 만들어 준다. objet file에는 code와 data들이 들어있다. 3. linker : object file이 만들어 진 후 linker가 개입되어 추가적..
프로세스 메모리 구조는 이런 식으로, 스택과 같은 경우는 위쪽에서부터 촘촘하게 아랫방향으로 진행되고, 힙은 아래쪽에서 위 방향으로 채워져 올라가는데 힙 메모리의 특성상 중간중간에 비어 있을 수 있다. 프로그램의 실행 과정 중에서 새로운 공간을 할당받고, 이미 할당받은 메모리가 해제되면서 빈 공간이 생기기 때문이다. 앞선 챕터들에서 힙과 스택 메모리의 장단점과 특징, 그리고 그 차이점에 대해 알아보았다. 정리해보면, Stack 스택 메모리는 1) stack frame 스택 프레임 단위로 할당 해제가 된다. 2) 할당 해제의 위치는 항상 탑 위치에서부터 일어나게 된다. (위 프로세스 메모리 뷰 위쪽) Heap 힙 메모리는 1) 새로운 메모리 공간을 받기 위해 힙 공간 중간에 어느 파트가 비어 있는지 확인해야..
힙 메모리 사용 방법 1) C Style 2) C++ Style 3) Safer C++ Style 1. C스타일 (1)malloc 명령어 사용 (2) C style class Cat 컴파일: 된다. 그런데, 분명히 컨스트럭터와 디스트럭터를 생성해 놓았음에도 불구하고 "meow" "bye" 가 호출되지 않는다. *C 스타일(malloc) 의 힙 메모리 관련 명령어들은 그냥 사용하지 말 것. 2. C++ 스타일 new, delete 키워드 사용 방금 코드에서 malloc 부분을 new로, free 부분을 delete로 치환해 보자. //array의 경우 //int의 경우에는 3. Safer C++ style 위의 방식대로 할 경우에...만약에 if 프로그래밍을 하다가 delete 부분을 잊어버린다면? 즉, ..
HeadlessCreator
머리없는개발자