2024/11 60

인라인 함수

함수를 호출할 때 필요 조건 함수는 메모리 안에 "할당"되어 있다. 함수를 호출하기 위해 필요한 단계들 변수들을 스택에 push 함수 주소로 점프 함수를 실행 호출자 함수로 다시 점프 1번 단계에서 넣어뒀던 변수들을 "pop" 함수 주소로 이동되서 써야하니까 변수를 스택에 넣어두고스택에서 가리키는 포인터를 확 뒤돌리는 것 만으로도충분히 그 값을 쓸 수 있다.하나하나 빼서 쓰지는 않다. 여기서 실제 컴퓨터 아키텍처에 따라4,5번은 순서가 뒤바뀔 수 있다. 함수의 단점뭔가 여러 단계를 거치므로 생기는 단점이 있을 것 같지 않은가? 여러 단계를 거치다보니 좀 더 느리다는 단점있다.CPU 캐시에 최적이 아닐 수도 있으면 더 느리다.모던 cpu 아키텍처에서는 더 느리다...

언리얼 내부 - 모듈 (Modules)

모듈이란?모듈은 언리얼 엔진과 우리가 사용하는모든 것을 구성하는 블록이라고 생각할 수 있다.언리얼 엔진 내부는 기본적으로 모듈이다.그리고 편집기를 확장하려면 자체 모듈과리소스 드롭다운을 만들어야 한다. 이전에 모듈에 대해서 포스팅을 했으니이번 포스팅에서는 간단히프로그래머가 알아야 할 세가지 주요 사항만 언급하겠다. 프로그래머가 알아야 할 세 가지 모듈의 주요 사항1. 모듈은 좋은 코드 분리를 강제하며 이런 특징은 매우 유용하다.언리얼 내부에는 많은 코드가 있지만어떻게든 코드끼리는 서로 통신해 하는 상황에서 모듈은 좋은 구조를 가진다.언리얼 엔진은 상호 종속적인 모듈과 플러그인을 지원한다.프로젝트 모듈은 파일에서 플러그인을 활성화하여 플러그인에 종속될 수 있다.프로젝트 모듈은 엔진 모듈에 종속될 수 있지만..

UE5 2024.11.25

시스템 프로그래밍의 이해와 접근

언어와 프로그래밍 본격적으로 시스템 프로그래밍을 설명하기 전에 앞서,언뜻 보면 C언어나 C++과 같은 언어를 많이 공부한다. 물론 Java를 공부하거나 그 외 다른 언어를 공부하시는 분들 또한 많을 것이다. 이러한 것들은 컴퓨터 프로그래밍 언어인 것이지컴퓨터 시스템에서 기능을 십분 활용할 수 있는 것들은 아니다.이러한 언어를 이용해서 시스템 프로그래밍이란 것을 공부한다. 그렇게 되면,시스템 프로그래밍..? 어그거 시스템 프로그래밍만 전문적으로 하는 사람이 배워야 하는 거 아닌가?싶을 수 있는데...모든 프로그래머가 알아둬야 하는,모든 응용 프로그램에 들어가는 요소가이런 시스템 프로그래밍이다. 우리가 C언어를 공부하고 난 다음에,내가 컴퓨터 위에서 돌아가는 무언가를 작성해야겠다!라는 다짐이 생긴다면시스템 ..

Casting - 왜 C스타일 캐스팅은 4개로 나뉘었을까?

캐스팅(형 변환, Casting)캐스팅은 형변환 하는 것을 말한다. 암시적(Implicit)캐스팅프로그래머가 명시적으로 형 변환을 안할 경우에,알아서 컴파일러가 형변환을 해준다.단, 형변환이 허용되는 변환일 때에만 작동한다. 당연히, 프로그래머가 명시적 형변환을 할 때에는컴파일러가 개입하지 않으므로 암시적 캐스팅은 일어나지 않는다. 예시 코드int number1 = 3;long number2 = number1;  명시적(Explicit) 캐스팅 C++ 캐스팅의 종류static_castconst_castdynamic_castreinterpret_cast C 스타일 캐스팅이 C++에서 4가지로 나뉜 이유int score = (int)someVariable; 위 코드는 대체 무얼 할까? 위 코드는 C++ 스타..

점진적 가비지 컬렉션

점진적 가비지 컬렉션이란?UObject를 위한 개선된 가비지 컬렉션 시스템이다. 언리얼 엔진은 마크 앤 스윕 가비지 컬렉터를 사용하여 UObject 메모리를 관리한다.소프트 리얼 타임( soft-real-time ) 애플리케이션의 경우,가비지 컬렉터에 한 가지 큰 단점이 있다.가비지 컬렉터가 어떤 오브젝트의 메모리를 회수할 수 있는지 결정하는 동안Gameplay hitches가 발생할 수 있다는 것이다. UE에서는 이 프로세스를 도달 가능성 분석이라고 한다.UE5는 항상 가비지 컬렉션의이 단계가 한 프레임 내에 완료되도록 의존해 왔으며,이로 인해 일시적으로 모든 UObject 처리가 중지된다. 도달 가능성 분석에서스캔해야 할 오브젝트가 많을수록 일시정지 시간이 길어지고,그 결과 가시적인 게임플레이 히치를..

UE5 2024.11.23

프로그래머스 LV.1 모의고사

https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr    해당 문제는 완전탐색 문제이다. 완전 탐색이란,가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.따라서 해당 경우의 수를 하나하나 if문으로 찾아주면 된다.  내가 처음에 낸 풀이#include #include #include using namespace std;vector solution(vector answers) { vector answer; vector results = { 0,0,0 }; ..

인터페이스

C++ 에는 인터페이스가 없다.따라서 추상클래스로 인터페이스를 구상한다.근데 추상클래스와 인터페이스는 어떻게 구분할까?Interface와 abstract의 차이는 Interface는 함수만 있다는 것이다.또한 인터페이스는 다음과 같이 정의한다. // IFlyable.hclass IFlyable{public: virtual void Fly = 0}; 인터페이스는 클래스 명 앞에 I라는 대문자를 붙여준다.이는 인터페이스임을 명확하게 하기 위해서이다. 또한 함수는 순수가상함수로 만들어준다.인터페이스는 다중 상속을 허용한다. 인터페이스 정리 인터페이스 C++은 자체적으로 인터페이스를 지원하지 않는다. 순수 추상 클래스를 사용해서 Java의 인터페이스를 흉내낸다 순수 가상 함수만 가진다 멤버..

가상 소멸자와 비 가상 소멸자

비 가상 소멸자가상 소멸자를 안쓰는 경우는 어떻게 될까?가상 소멸자가 뭐길래, 가상 생성자는 없으면서가상 소멸자가 메모리 누수를 방지한다고 할까?왜 소멸자에 가상 키워드를 넣어야할까? 그에 대한 예시를 다음과 같이 추상화한 그림을 통해 알아보자. myCat이 delete될 경우(virtual 소멸자가 아닌 경우) 왜 그럴까?전에 정리한 가상 테이블을 기억해내면 금방 왜 그런지 알 수 있다. 만약 virtual 키워드를 붙였을 경우 즉 자신의 실 자료형에 맞는 소멸자를 호출하기 위함이다. 가상 소멸자는 매우 중요하다.반드시 유의할 점은,모든 클래스마다 가상 소멸자를 꼭 써줘야 한다.근데 가상함수 느리다면서가상 소멸자가 있는 클래스를 상속받지 않아도 이러라고? 싶을 수 있다. 근데 업캐스팅 해서 쓸 때,부모..

다형성(Polymorphism)

poly 라는 것이 여러 개라는 뜻을 가지고 있다. 그럼 morphi는 뭘 뜻할까? 모습이란 뜻을 가지고 있다. 여러 모습 즉 다형성이다. 개체지향 프로그래밍에서 많이 쓰이는 것이 다형성이다. 다형성을 배우기 전에, 멤버 함수에 대해 알아보자. 멤버 함수에 대해 말해 보자.다음 그림은 코드를 예시로 어떻게 스택과 힙에 메모리가 적재되는지 추상적으로 가시화한 것이다. 멤버 함수의 메모리 멤버 함수도 메모리 어딘가에 위치해 있다. (사실 사용되는 모든 정보는 메모리에 어딘가에는 위치해 있어야 한다.) 모든 것이 메모리 어딘가에 위치해 있어야 한다. (함수 == 코드 섹션의 주소) 근데 각 개체마다 멤버 함수의 메모리가 잡혀 있을까? 아니다. 모든 개체는 함수 하나를 공유한다. 그 대신 각 멤버 함수는 컴파일..

프로그래머스 LV.1 달리기 경주

https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 이중 포문으로 풀기 (시간 초과) 시간 초과가 난 코드 - 아마 이중 포문 때문일 거 같다. player의 길이가 50000까지이고, calling의 길이가 1000000이니 시간 초과가 날만하다. #include using namespace std; bool cmp(const pair& a, const pair& b) { return a.second < b.second; } vector solution(vector players, ve..

카테고리 없음 2024.11.20