Coding/Unreal, C++

    [C++ Primer Plus] 8. Adventures in Functions

    C++ Inline Functions Inline Functions은 프로그램의 속도를 올리기 위한 C++ 기능이다. 일반 함수와 인라인 함수의 차이점은 문법 보다는 컴파일러가 다루는 방법이다. 프로그램을 빌드하고 프로그램을 실행한다. 그러다가 function call에 다다르면 프로그램은 현재까지 수행한 명령 지점을 저장하고 매개변수로 넣은 값들을 stack에 저장한다. 그리고 함수의 실행 지점으로 날라가서 함수를 실행시킨다. 함수가 끝나면 아까 저장한 명령 지점을 불러내서 그쪽으로 돌아간다. 이런 과정들이 함수의 오버헤드다. 즉, 속도가 저하될 수 있는 지점이다. Inline function은 함수 호출 오버헤드를 해결하는 방법이다. 컴파일러가 인라인 함수 호출 시마다 함수 코드 자체를 그곳에 복사하..

    [C++ Primer Plus] 7. Funtions: C++'s Programming Modules

    Function Review 함수를 사용하려면 다음 절차를 거친다. 함수를 정의한다. 함수 프로토타입을 소스코드 서두에 쓴다. 함수를 호출한다. Why Prototypes? 함수 프로토타입은 컴파일러에게 함수 인터페이스를 알려주는 역할이다. 어떤 값이 리턴 되는지, 어떤 타입의 매개변수들을 받아야 하는지 등을 알려준다. 그러면 왜 프로토타입을 쓰는지 궁금할 수 있다. 그냥 main()에서 함수를 쓸 때마다 거기가서 찾아보면 되지 않나? 컴파일러는 그렇게 돌아가지 않는다. 너무 비효율적이기 때문이다. 애초에 함수의 정의가 다른 파일에 있을 수도 있다. 그럼 main() 위에 바로 함수를 정의하면 컴파일 되던데? 그건 맞다. 하지만 이는 별로 선호되지 않는다. main()이라는 주요 과정을 바로 볼 수 없기..

    [C++ Primer Plus] 10. Objects and Classes

    답해야 할 질문 new와 malloc()의 차이가 무엇인가 Abstraction, 추상화란 무엇인가 inline 메소드는 어떻게 작동하는가 enum class는 enum과 무엇이 다른가, 왜 필요한가 여는 글 OOP는 프로그램 디자인에 대한 하나의 방법일 뿐이다. C++은 프로그래머가 OOP적 접근을 더욱 쉽게 할 수 있도록 여러 기능을 추가했다. Abstraction Encapsulation and data hiding Polymorphism Inheritance Reusability of code class는 C++가 이러한 특징들을 한데모아 구현한 집합체다. Procedural and Object-Oriented Programming 절차지향적 접근은 먼저 어떤 일을 해야할 지 결정하고 나서 어떻게..

    malloc(), new

    'new' keyword new는 C++에서 등장한 키워드로 C의 malloc()을 대신한다. A* ptr = (A*)malloc(sizeof(A)); // malloc()을 활용한 동적 메모리 할당 A* ptr = new A; // new을 활용한 동적 메모리 할당 기본적으로 malloc()과 new의 차이점은 2개다. malloc()은 함수지만 new는 연산자다. 그래서 new는 연산자 오버로딩도 가능하다. new는 클래스의 생성자를 호출해준다. 이로 미뤄보아 new 연산자를 굳이 추가한 이유는 2가지를 들 수 있겠다. malloc()에 비해 문법이 간결하다. OOP는 C++의 주요 컨셉 중 하나이고 new는 오브젝트를 동적할당할 때 생성자 호출을 간단하게 구현해준다. 그렇다면 'new'는 mallo..

    I/O multiplexing: select(), poll(), kqueue()

    select() 특징 등록한 fd를 전부 체크해서 이벤트를 알아내야 한다. 커널 공간과 유저 공간 사이에 데이터 복사가 일어난다. 사용이 간편하고 지원 OS가 많아 portability이 높음 struct fd_set select()는 여러 fd를 한꺼번에 관찰하기 위해 fd_set 구조체를 활용한다. fd_set 구조체는 각 fd의 상태를 바트로 표현한다. fd가 겹칠 일은 없으니까 그 fd를 인덱스로 사용해서 해당 fd의 상태를 알아낼 수 있다. 상상 예시) short state = (fd_set >> fd) & 1; 이렇게 되면 각 fd를 추가하거나 확인할 때마다 귀찮은 비트 연산을 해야한다. 그래서 이를 위한 매크로가 있다. FD_ZERO(fd_set* set); //fdset을초기화 FD_SET..

    [C++ Primer Plus] 4. Compound Types

    출처 C++ Primer Plus 6판 챕터 4 대답해야 하는 질문들 wchar_t, char16_t, char32_t를 쓰는 string을 정의하는 방법이 무엇인가. struct에서 bit field는 무엇인가. int에서 enum, enum에서 int로의 캐스팅 차이점이 무엇인가. union은 어떻게 사용되는가. 서론 C++은 복합 자료형(Compound Type)을 제공한다. 복합 자료형은 integer와 float 자료형으로 이뤄진다. 가장 광범위한 복합 자료형은 Class다. 이 뿐만 아니라 C++은 C에서 가져온 복합 자료형 또한 제공한다. 예를 들어, array는 같은 자료형으로 여러개의 값을 가질 수 있다. Structure는 다양한 자료형의 여러개의 값을 가질 수 있다. Introduci..

    [번역] HTTP 서버: 밑바닥부터 만들어보기

    이 포스트는 다음 포스트를 번역/의역한 글입니다. 가독성을 위해 임의적으로 편집한 부분이 있습니다. 출처 https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa HTTP Server: Everything you need to know to Build a simple HTTP server from scratch Vote for next post or mention what do you want to see next here: medium.com 서론 HTTP는 어디에나 있습니다. 우리가 방문하는 모든 웹사이트가 HTTP 서버 위에서 ..

    [C++ Primer Plus] 3. Dealing with Data

    대답해야 할 질문들 ASCII, Unicode, UTF가 어떤 개념인지, 어떤 차이가 있는지 설명하세요. Simple Variables int braincount; braincount = 5; 이 두 줄의 코드는 구체적으로 다음과 같이 작동한다. int형 데이터를 담을 수 있을 만큼의 데이터를 할당한다. 할당된 데이터 위치를 기록한다. 5라는 값을 해당 위치에 복사한다. Integer Types 일부 언어는 정수형 데이터로 int 하나만을 지원하지만 C++은 여러 개로 구분한다. 그 구분에 따라 메모리 사이즈가 다르다. 즉, 담을 수 있는 값의 범위가 다르다. short, int, long, long long으로 구분한다. 차이는 다음과 같다. 2bytes