C++ 디버깅과 프로파일링
·
C++ Programming/C Basic
중단점(BreakPoint)를 활용하면 C++ 프로그램의 실행을 잠시 멈추곡 프로그램의 동작 상태나 변수에 입력된 값들에 대해 분석할 수가 있고 단계별로 코드를 실행하면서 변수의 변화를 추적할 수도 있습니다. 비주얼 스튜디어에서는 중단점을 걸고 싶은 라인에서 F9를 누르거나 코드 라인 왼쪽 코드 줄 표시가 된 여백을 클릭하면 됩니다. 중단점VS(Visual Studio) 에서는 위의 설명한 일반적인 중단점 말고도 조건부로 중단점을 설정할 수가 있습니다. 예를 들자면 for 문과 같은 반복문을 돌릴때 특정 조건이 맞았을 경우에만 값을 확인하고 싶다면 조건부 중단점을 사용하면 됩니다. 중단점을 우클락하여서 조건을 걸 수가 있습니다.디버거(debugger)는 변수 상태를 포함해 실행 중인 코드의 모든 정보를 ..
알고리즘의 정의 및 5가지의 필요조건
·
C++ Programming/C Basic
알고리즘은 문제를 해결하기 위한 일련의 절차나 방법을 체계적으로 나열한 것입니다. 컴퓨터 프로그래밍에서 알고리즘은 특정 작업을 수행하거나 문제를 해결하기 위해 컴퓨터에게 지시하는 단계별 명령의 집합이라고 하는데 왜냐하면 알고리즘은 프로그램의 효율성, 성능, 문제 해결 능력을 결정짓는 요소이기 때문입니다. 따라서 알고리즘은 문제를 해결하기 위해 명확하고 유하한 순서의 단계들의 집합이라고 볼 수 있습니다. 쉽게 말해, 입력 - 처리 - 출력의 과정이 잘 정의된 문제 해결 방법 입니다.알고리즘의 5가지 필요조건일반적으로 좋은 알고리즘이 갖춰야 할 필수 요소는 다음과 같습니다.첫번째로는 입력(Input) 이며 알고리즘은 0개 이상의 외부로부터 제공되는 데이터를 가져야 합니다. 그 다음은 출력(Output)으로..
Smart Pointer(스마트 포인터)
·
C++ Programming/C Basic
언리얼 엔진에서 Smart Pointer(스마트 포인터) 는 메모리 할당과 추적의 편리함을 주도록 설계된 C++ 스마트 포인터들의 커스텀 구현입니다. 스마트 포인터에는 Shared Pointers(쉐어드 포인터), Weak Pointers(위크 포인터) 그리고 Unique Pointers(유니크 포인터)가 포함되어 있습니다.스마트 포인터 타입스마트 포인터들은 갖고 있거나 참조하는 오브젝트의 생명 주기에 영향을 줄 수 있으며, 다른 스마트 포인터마다 오브젝트에 주는 제한사항과 효과도 달라집니다.Shared Pointers (`TSharedPtr`)쉐어드 포인터는 참조하는 오브젝트를 소유하며, 무기한으로 오브젝트의 소멸을 방지하고, 참조하는 쉐어드 포인터 또는 쉐어드 래퍼런스가 없을 경우에 오브젝트를 소멸시..
fmodf, remainderf
·
C++ Programming/C Basic
fmodf vs remainderffmodf와 remainderf는 모두 float 타입의 나머지 계산 함수입니다. 둘 다 유사해 보이지만 계산 방식과 결과의 부호, 범위가 다릅니다.fmodf(float x, float y)fmodf(x, y) = x - trunc(x / y) * yx를 y로 나는 목에서 정수 부분만 취해 나머지를 계산합니다.fmodf(5.3f, 2.0f) → 1.3fmodf(-5.3f, 2.0f) → -1.3결과는 x의 부호를 따릅니다.결과 범위는 0 remainderf(float x, float y)remainderf(x, y) = x - round(x / y) * yx를 y로 나는 목을 반올림(round) 해서 나머지를 계산합니다.remainderf(5.3f, 2.0f) → -0...
lvalue, rvalue
·
C++ Programming/C Basic
lvalue, rvaluelvalue는 메모리 주소를 가지고 있는 값이며 예시로 변수나 배열 요소 등이 있습니다. 메모리 주소를 가지고 있기에 참조할 수 있고 어떤 객체나 변수에 대입의 왼쪽으로 올 수 있는 값을 의미합니다. 스택, 힙, 정적 메모리 등 객체가 존재하는 메모리 영역에 저장됩니다. rvalue는 일시적인 값이나 메모리 주소를 가지고 있지 않은 값들을 의미하며 식이 끝나면 소멸되는 값들을 의미합니다. 메모리 주소가 없기에 대입문의 오른쪽에만 올 수 있는 값들을 의미합니다, 일반적으로 메모리 주소를 직접적으로 가질 수는 없습니다. 모든 lvalue는 rvalue가 될 수 있지만 모든 rvalue는 lvalue가 될 수 없다고 하며, 그 이유로는 당연히 rvalue는 메모리 주소를 가지지 않는..
RTTI (Run-Time Type Information)
·
C++ Programming/C Basic
RTTI (Run-Time Type Information)런타임 타입 정보(RTTI, Run-Time Type Information)는 런타임 시 객체의 자료형에 관한 정보를 드러내는 C++ 키워드 중 하나이며 RTTI 안에는 `typeid`나`typeinfo`가 들어있습니다. 해당 객체가 실제로 어떤 자료형을 가지고 있는지 알 수 있으며 런타임 중 `dynamic_cast ` 연산 시 안전한 형 변환을 위해서 사용됩니다.RTTI는 오직 다형성을 가지고 있는 클래스들에 사용이 가능하기에 클래스 내부에 가상함수가 하나라도 있어야만 클래스 내부에 생성되게 가상 소멸자를 사용하는 경우도 있습니다. 또한 최적화나 리소스 비용 절약을 위해서 RTTI를 의도적으로 생성하지 않거나 지울 수도 있습니다. typeidR..
#pragma
·
C++ Programming/C Basic
`#pragma`는 전처리 구문 중에 하나이며 전처리 구문이란 간단하게 컴파일 이전 단계에 처리해야할 구문이라고 볼 수 있습니다. C++언어세 전처리 구문에는 `#pragma` 외에 대표적으로 `#define` , `#include` 등이 있고 해당 선언들을 보면 선언 앞에 # 기호가 붙어 있는데 C++에서 #기호가 앞에 붙어 있다면 전처리 지시자로 앞서 말했든 컴파일러가 번역을 하기전에 처리할 구문들 이라고 볼 수 있습니다.#pragma#pragma는 선언 뒤에 오는 내용에 따라서 전처리기에게 어떤 일을 하라는 명령을 내려줍니다. 선언 형태는 보통 `#pragma ____` 형태를 가지고 있습니다.. 뒤의 공백에 오는 키워드에 따라서 `#pragma`를 통해 실행 되는 기능이 달라지게 됩니다. 대표적으..
포인터
·
C++ Programming/C Basic
포인터?모든 데이터들은 메모리 상에 특정한 공간에 저장되어 있습니다. 하나의 메모리 공간은 보통 1Byte(바이트)라고 정의되며 만약 4Byte짜리 `int`형 변수를 정의한다면 메모리 상의 4칸을 차지하게 됩니다. 프로그램 작동 시 컴퓨터는 여러 메모리 공간에 있는 데이터들을 필요로 하게 됩니다. 따라서, 어떤 메모리 공간에 데이터를 가져올지 구분하기 위해서 각 메모리 공간에 고유의 주소(address)를 붙여 주었습니다.int a = 123;위와 같은 `int` 변수 `a`를 선언하였다면 `int`의 크기만큼 (4Byte) 차지하는 공간에 $123$이라는 수가 저장되고 컴파일러가 `a`라는 변수를 해당 메모리 주소와 연결합니다.이때 123은 메모리 주소 `0x000001`에 저장이 됩니다. `0x00..