👩🏻‍💻기초지식 51

[C++] 빌드 컴파일 과정, C++ 빌드과정과 언리얼 빌드과정의 차이점은?

컴파일러 컴파일 과정 (빌드 과정 = 컴파일+링킹 과정) : 컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 번역하는 작업을 말한다. : C++의 경우 운영체제별로 컴파일러가 다르기 때문에 소스코드를 각 컴파일러에 맞게 수정해야할 수 있다. 1단계: 전처리 과정 - 전처리기(Preprocessor)를 통해 헤더파일(.h)과 전역변수를 처리한다. - 전처리기를 이용하면 헤더파일(.h)와 소스 코드 파일(.cpp)을 전처리 된 소스 코드 파일(.i)로 변환한다. - 이 과정에서는 '주석 제거', '헤더 파일 삽입', '매크로 치환 및 적용' 의 세가지 작업을 수행한다. 설명 전처리 과정에선 #include, #define, #ifdef 등을 컴파일러가 이해할 수 있도..

[C++] 가변 파라미터 함수를 구현하는 방법은?

- 가변 파라미터 함수(Variadic Function)란, 매개변수의 개수가 고정되어 있지 않고, 호출 시에 인자의 개수를 유동적으로 받을 수 있는 함수를 말한다. - C++11 이상에서는 가변 인자 템플릿(Variadic Templates)을 사용하여 가변 파라미터 함수를 구현할 수 있다. - 가변인자 템플릿의 인자 "Types"는 여러개의 타입을 나타내 아래와 같이 선언할 수 있다. template void foo(Types ... args) { }

[C++] 스택프레임이란? EBP와 ESP

스택 프레임 (Stack Frame) - 스택 프레임은 함수 호출 시 생성되는 지역변수와 매개변수, 함수의 반환 주소 등을 저장하는 메모리 영역이다. - 즉, 함수의 호출 과정에서 호출되는 함수들을 사용하기 위해 할당되는 Stack 공간을 의미한다. - 스택 프레임은 함수의 실행이 끝나면 자동으로 해제되며, 이를 통해 다른 함수 호출 시 새로운 스택 프레임이 생성된다. 메모리 오버플로우 (Memory Overflow) - 메모리 오버플로우는 프로그램이 할당된 메모리 영역을 넘어서 데이터를 쓰거나 읽는 현상을 말한다. - 스택 프레임 내의 데이터를 침해할 수 있고, 보안상의 이유로 위험한 문제가 될 수 있다. EBP, ESP EBP (Extended Base Pointer, Frame Pointer, FP..

[C++] 함수 호출 규약이란? cdecl, stdcall, fastcall, thiscall 의 차이들?

함수 호출 규약 (Calling Convention) - 함수 호출 규약이란 어떤 함수를 호출할 때, 그 함수의 파라미터(인자)를 어떤 방식으로 전달하는가에 대한 하나의 약속을 말한다. - 함수 호출 규약은 컴파일러에서 설정할 수 있고, 일부 함수 호출 규약은 프로그래머가 직접 명시적으로 지정할 수 있다. - 함수 호출 규약을 지정하지 않으면, 기본적으로 CDECL 규약이 사용된다. 함수 호출 규약 종류 인자 전달 순서 : 왼쪽인자 → 오른쪽 인자 or 오른쪽 인자 → 왼쪽 인자 - 함수 인자들에 대해 어떤 순서로 스택에 쌓을 것인지 인자 전달 방법 : 스택 or 레지스터 스택 프레임을 정리하는 방법 : 함수 호출자[caller] or 함수 피호출자[callee] - 함수 종료 후 스택을 누가 정리할 것..

[C++] new/malloc과 delete/free 차이는? 가상 메모리 할당 함수란?

동적할당 new, malloc 차이 - new는 자료형 단위로 메모리를 할당하고, malloc은 바이트 단위로 메모리를 할당한다. - new는 생성자를 호출하고, malloc은 생성자를 호출하지 않는다. delete, free 차이 - delete는 소멸자를 호출하고, free는 호출하지 않는다. virtualalloc - virtualfree : 가상 메모리 할당함수 - new를 호출하면 내부에서 malloc을 호출하고, malloc 내부에서 heapalloc을 호출한 뒤, heapalloc 내부에서 virtualalloc 을 호출한다. - new의 내부에 malloc만 호출할 수 있는 것처럼 virtualalloc만도 호출할 수 있다. - Win32에서 추가된 가상 메모리 할당 함수는 malloc 함..

[C++] 구조체 특성, 패딩이란? 공용체란?

구조체 (struct) - 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입을 말한다. - 구조체를 이용하면 하나 이상의 변수를 그룹지어서 새로운 자료형을 정의할 수 있다. - 구조체의 크기는 구조체가 가지는 각 변수의 크기와 정렬방식에 따라 결정된다. 이때, 구조체의 크기가 변수 크기의 합보다 더 커지는 경우가 있는데, 이는 구조체의 패딩 때문이다. 패딩 (Padding) - 패딩은 구조체 내의 변수들 사이에 삽입되는 비어있는 메모리 공간을 의미한다. - 패딩 바이트는 byte를 일정한 간격으로 끊어 CPU의 데이터 접근 성능을 향상시키기 위해 사용한다. - 클래스(구조체)에 패딩 바이트를 추가하면 메모리 낭비를 발생하지만, CPU의 데이터 접근 속도가 빨라지고 메모리 정렬..

[C++] 매크로 변수의 문제점은?

매크로 변수의 문제점 - 매크로 변수는 define으로 변수를 정의할 때 자료형(type)을 특정하여 사용할 수 없다. - 자료형은 컴파일 시에 확정되기 때문에 변수를 가져다 쓰는 곳에서 자료형을 명시해줘야 한다. - 매크로는 전역 네임스페이스에 적용되므로, 같은 이름의 다른 변수나 함수와 충돌할 수 있다. #define Add(a, b) a * b 의 문제점 (매크로 함수의 함정) - a와 b 값으로 각각 하나의 숫자를 넘겨주면 문제없이 실행되지만 a의 값으로 2+3 을 넘겨주면 원치않은 결과값이 도출된다. - 정확히 사용하려면 #define Add(a, b) (a) * (b) 처럼 a와 b에 각각 괄호를 쳐줘야 한다.

[C++] 상수(const)의 역할과 종류

상수(const) - const 키워드는 변수를 '상수화'시켜준다. - 그러나 일반적으로 사용하는 진짜 상수(10,20,..) 처럼 변화하는 것이 아니라 문법적으로만 상수화를 시키는 것 포인터 - const int* const p; (= int const* const p 와 같다) - 앞 const : 값 자체를 변경불가 - 뒤 const : 주소 자체에 접근된 공간에 대한 변경불가 const - 포인터 - const int* p; ( int const* p 도 같은 의미) - const 키워드가 앞에있는 '포인터(*)'를 지칭하여 포인터가 가리키는 원본 변수가 상수화 된 것이다. - 따라서 포인터가 가리킬 대상을 변경할 순 있지만 원본 변수의 값을 변경할 순 없다. 포인터 - const - int* c..

[C++] auto 키워드

auto - 우변의 타입을 분명히 알아낼 수 있을 때 좌변의 타입을 자동으로 정해주는 키워드이다. - 컴파일러가 선언된 변수 또는 람다식 매개변수의 초기화 식을 사용하여 형식을 추론하도록 지시한다. - for(auto i : arr); 장점 - 자료형을 실시간으로 맵핑할 수 있다. - 단, 사용하려는 자료형이 미리 컴파일 되어있어야 한다. auto 키워드를 사용하면 안되는 경우 - 멀티컴파일 됐을 때 auto 키워드의 파일이 먼저 컴파일 됐는지 아닌지를 확신할 수 없다. 만약 먼저 컴파일 되지 않은 자료형을 auto 키워드로 사용하게 되면 에러가 발생한다. - auto 키워드를 사용하려면 지역변수 내에서만 사용하는 것이 좋다. (잘 안쓰는게 좋음) - auto 키워드는 함수의 매개변수나, 구조체, 클래스..

[C++] Call By Value/Address/Reference

Call By Value/Address/Reference - 함수를 호출할 때 인자를 전달하는 방식을 나눈 것 Call By Value (값에 의한 호출) - 함수를 호출할 때 매개변수에 있는 값이 함수로 복사되어 전달되는 형태 - 함수 내에서 매개변수의 값을 변경하더라도 원본 변수에 영향을 주지 않는다. Call By Address (주소에 의한 호출) - 함수를 호출할 때 매개변수에 포인터(*)를 전달하여 원본 변수의 주소를 전달하는 방식 - 함수 내에서 매개변수 값을 변경하면 원본 변수에 영향을 준다. Call By Reference (참조에 의한 호출) - 함수를 호출할 때 매개변수에 레퍼런스(&)를 전달하여 원본 변수를 참조하도록 하는 방식 - 함수 내에서 매개변수 값을 변경하면 원본 변수에 영..

728x90