malloc/free new/delete
메모리가 heap에 할당된다. 메모리가 Free Store에 할당된다.
결과가 타입 지정 없이 void*로 반환된다. 결과가 명확한 타입이 지정된다.
할당에 실패하면 NULL을 반환한다. 할당에 실패하면 error를 throw 한다.
메모리 할당 할 때 사이즈를 지정해 줘야 한다. 컴파일러가 메모리 크기를 계산해서 잡아준다.
더 큰 메모리로 재할당 하는 과정이 비교적 간단하다. 더 큰 메모리로 재할당 하는 과정이 비교적 귀찮다.
기본적으로 함수이다. 기본적으로 연산자이다.

 

malloc/free는 메모리를 할당하는 함수로, 할당 시 메모리가 heap 영역에 바로 할당이 된다.

또한 type과 관계 없이 반환하는 타입은 반드시 void*이며 실패 시 NULL을 반환한다.

메모리를 할당할 때에는 반드시 객체 크기를 Byte 단위로 지정을 해줘야 한다.

그리고 생성된 메모리 영역은 쓰레기값으로 차있기 때문에 초기화 과정이 따로 요구된다.

 

new/delete는 연산자이기 때문에 사용자가 overloading이 가능하다.

메모리를 할당 할 때 크기를 컴파일러가 계산해주기 때문에 따로 지정 할 필요가 없고,

연산 결과가 명확한 타입으로 반환되며 실패 시 Error를 throw 하기 때문에 에러 처리가 필요하다.

메모리를 할당할 때 free store에 할당이 되며, 할당 시 생성자를 호출하기 때문에 값이 초기화가 되어 있다.

 

new에서 생성자는 구현된 생성자에 따라 방법이 다르다.

아무것도 없다면 default 생성자를 호출한다던가, 

중괄호로 묶여 있다면 Initialize list를 호출한다던가.

 

대략적으로 짚어 보았는데 이렇게 대답을 하면 Free Store가 무엇인지 물어볼 것이다.

Free Store는 C에서의 Heap영역이라 보면 된다.

단 이는 개념적인 부분이고 실제로 메모리 영역이 나뉘어져 있는 것은 아니다.

다만 C++에서는 Heap보다는 Free Store라는 용어를 사용하는 것이 더 바람직하다는 얘기도 있다.

 

자료 출처

https://jacking75.github.io/Cpp_memory_region/

 

C++ - 메모리 영역 - jacking75

메모리 영역에 대해서 5 종류의 메모리 영역 C++ 에서는 다른 특성을 갖는 5 종류의 메모리 영역이 존재한다. (※ 단 c++ 규격에는 스택이나 힙은 명시 하지 않고 Free-Store는 명시 하고 있다) Const Data

jacking75.github.io

https://stackoverflow.com/questions/1350819/c-free-store-vs-heap

 

C++, Free-Store vs Heap

Dynamic allocations with new/delete are said to take place on the free-store,while malloc/free operations use the heap. I'd like to know if there is an actual difference, in practice. Do compilers...

stackoverflow.com

 

Virtual 키워드는 C++에서 Override 할 시 반드시 붙여줘야 하는 키워드다.

그리고 이를 붙여줘야 하는 이유를 묻는다면 입문자들은 "이걸 붙어야 Override가 되요"라고 답할 것이다.

 

여기서 C++을 좀 더 배운 사람이라면 이렇게 답할 것이다.

"C++의 virtual 키워드가 붙은 함수들은 vtable에서 함수의 주소값이 관리가 된다.

이후 하위 클래스에서 override를 하면 vtable의 주소값이 변경이 된다.

이를 통해 하위 클래스의 instance에서 override를 한 함수를 호출하면,

vtable에서 함수를 찾는 과정에서 상위 클래스의 함수가 아닌 하위 클래스의 함수를 받아오게 된다."

라고 답할 것이다.

 

하지만 virtual 키워드가 붙는 경우가 두가지가 더 있다.

하나는 생성자, 다른 하나는 소멸자이다.

그렇다면 생성자(Constructor)와 소멸자(Destructor)에서 virtual 키워드는 어떻게 동작할까?

 

이 두가지 경우, virtual 키워드가 붙어 있으면 vtable에서 상위 클래스의 생성자나 소멸자를 검색한다.

그리고 검색된 결과를 현재의 생성자/소멸자 코드 앞에 붙여준다.

이는 재귀적으로 발생하여, 최상위 클래스의 생성자/소멸자부터 순차적으로 호출이 된다.

 

이렇게 모든 생성자/소멸자들이 호출이 되면, 컴파일러는 다시 한번 코드를 자동 생성한다.

바로 멤버를 자동으로 생성/소멸하는 과정이다.

 

정리를 하자면, 

"Virtual 키워드가 붙은 함수는 물론이고 생성자, 소멸자들은 vtable에서 어떤 것을 사용 할지 관리가 된다.

이 중 함수는 Instance에 따라 하위 클래스의 함수를 호출하고, 

생성자와 소멸자는 상위 클래스의 것을 먼저 호출한 뒤 자신의 것을 호출하며,

마지막으로 멤버 생성/소멸 과정을 거친다.

때문에 Override 할 때 virtual 키워드를 사용해야 한다."

 

정도가 될 것 같다.

 

참고자료: https://stackoverflow.com/questions/7750280/how-does-virtual-destructor-work-in-c

 

How Does Virtual Destructor work in C++

I will type an example : class A { public: virtual ~A(){} }; class B: public A { public: ~B() { } }; int main(void) { A * a = new B; delete a; return 0; } Now in Above Example , destructors ...

stackoverflow.com

'메모장 > 기술면접' 카테고리의 다른 글

UE4 UPROPERTY란 무엇인가?  (0) 2020.09.01
C++ malloc/free와 new/delete의 차이점  (0) 2020.08.28
Unity Boxing과 UnBoxing  (0) 2020.08.11
UE4 Actor의 Role과 Remote Role  (0) 2020.08.10
UE4 Replicate 방식간 차이  (0) 2020.08.10

Q: Unity Boxing과 UnBoxing에 대해 설명해 보아라

 

A: Boxing은 Stack 메모리의 Data를 Heap 메모리에 할당을 하는 방식이다.

Object a = value일 때 Heap 영역에 value 값이 할당되고, a는 그 값의 주소를 참조한다.

 

반대로 이렇게 Heap 영역에 할당된 Value를 Stack 메모리에 할당을 해야 하는 경우도 있다.

위 Object a에 대해 int b = (int)a 와 같이 값을 할당하는 것이 UnBoxing이다.

 

Boxing은 Stack의 값을 Heap에 할당하는 방식이고, UnBoxing은 Heap에 할당된 값을 Stack에 할당하는 방식이다.

 

단 이 방법의 단점은 Boxing한 메모리와 UnBoxing 한 메모리. 두 개의 메모리가 발생하기에 가비지가 발생한다는 점.

그리고 Value를 Boxing은 일반 할당보다 최대 20배, UnBoxing은 Casting 과정보다 최대 4배의 시간이 더 걸릴 수 있다.

이러한 단점에도 간간히 사용되는 이유는 그 편리성 때문이다.

주로 ArrayList, Hash Table이 대표적인 예이다.

Q: Actor의 Role과 Remote Role에 대해 설명하라

 

A: Role은 Actor에 대한 Authority Owner Actor의 Replication 여부, Remote Role은 Replication Mode를 나타낸다.

특정 Actor의 Authority를 알아내기 위해 Role이 ROLE_Authority인지 검사한다.

이 값을 가진 Instance가 이 Actor를 담당한다.

그리고 Server와 Client는 Role과 Remote Role의 값이 반대이다.

이 외에 Client의 Replication Mode를 지정하는 Role이 두개가 존재한다.

 

'메모장 > 기술면접' 카테고리의 다른 글

C++ Override 시 Virtual Keyword를 써야 하는 이유  (0) 2020.08.28
Unity Boxing과 UnBoxing  (0) 2020.08.11
UE4 Replicate 방식간 차이  (0) 2020.08.10
내적의 의미  (0) 2020.08.10
기술면접 질문 정리  (0) 2020.08.10

Q: UE4에 Replicate 방식은 두가지가 있다. 둘에 대해 설명을 해보라

 

A: Property Replicate와 RPC 방식이 있다.

Property Replicate는 UPROPERTY 매크로에 그 변수 값이 바뀔 때 호출되는 RepNotify를 이용해 값을 동기화 한다.

RPC는 함수를 이용해서 값을 바꿔주는 방식이다.

Property Replicate는 값이 바뀔 때만 호출이 되는 반면, RPC 함수는 값의 안정성을 보장해준다.

'메모장 > 기술면접' 카테고리의 다른 글

C++ Override 시 Virtual Keyword를 써야 하는 이유  (0) 2020.08.28
Unity Boxing과 UnBoxing  (0) 2020.08.11
UE4 Actor의 Role과 Remote Role  (0) 2020.08.10
내적의 의미  (0) 2020.08.10
기술면접 질문 정리  (0) 2020.08.10

Q: 내적이란 무엇인가?

A: 내적은 두 벡터의 성분곱의 합으로 한 벡터를 다른 벡터로 사영 했을 때 그 벡터 성분들의 곱으로 표현이 가능하다. 때문에 두 벡터 사잇각을 구할 수 있고, 주로 조명 연산에 자주 이용된다.

 

Q: 내적의 연산 결과가 스칼라 값으로 나오는 이유는 무엇인가?

A: 내적 연산인 성분곱의 합이 스칼라 곱셈이기 때문이다. 

 

Q: 내적의 의미는 무엇인가?

A: 한 벡터를 다른 벡터로 사영 했을 때 그 벡터 성분들의 곱이다.

 

Q: 내적을 사용하는 예시를 몇가지 들어달라

A: 주로 조명 효과를 낼 때 내적을 사용하고, Coordination을 바꾸는 Transform 과정도 내적을 통해 이루어진다.

'메모장 > 기술면접' 카테고리의 다른 글

C++ Override 시 Virtual Keyword를 써야 하는 이유  (0) 2020.08.28
Unity Boxing과 UnBoxing  (0) 2020.08.11
UE4 Actor의 Role과 Remote Role  (0) 2020.08.10
UE4 Replicate 방식간 차이  (0) 2020.08.10
기술면접 질문 정리  (0) 2020.08.10

취업 기간이 길어지면서 기억나는 것을 천천히 찾아보고 좀 정리를 해볼까 합니다.

 

정답까지는 아니고 제가 답변 했던 내용이나, 

이렇게 답변하면 좋았겠다 싶은 것들을 적으려 합니다.

'메모장 > 기술면접' 카테고리의 다른 글

C++ Override 시 Virtual Keyword를 써야 하는 이유  (0) 2020.08.28
Unity Boxing과 UnBoxing  (0) 2020.08.11
UE4 Actor의 Role과 Remote Role  (0) 2020.08.10
UE4 Replicate 방식간 차이  (0) 2020.08.10
내적의 의미  (0) 2020.08.10

Multiplay 기능을 지원 할 때 단순히 UE_LOG를 사용하면

테스트 중 접속한 Client 갯수만큼 Log가 출력되어 정확히 판단하기 힘들 때가 있다.

 

이에 대해 여러가지 답안을 모색 했으나, 비루한 영어 실력과 그에 비해 광활한 답안으로 인해 명확한 답을 찾지 못했다.

그리고 마침내, 한가지 제대로 동작하는 케이스가 있어 이를 따로 작성한다.

 

https://forums.unrealengine.com/development-discussion/c-gameplay-programming/49577-how-to-know-on-client-side-if-an-actor-is-own-by-the-current-network-connection

 

How to know on client side if an actor is "own" by the current network connection - Unreal Engine Forums

For gameplay programmers writing C++ code.

forums.unrealengine.com

혹 나와 같은 문제를 겪은 사람이 이 글을 보고 보다 빠르게 문제를 해결하기를 바란다.

이틀 전 토요일, 정오 즈음에 이를 사용하는 Constructor를 작성하였으나 fatal error c1853이 발생.

 

에러 코드 절반은 crushed 되어 있어서 문제를 알 수 없는 상황.

 

하루 종일 검색과 시도를 하였으나 해결하지 못하였다.

 

오늘도 1시간 정도 삽질을 하다가 log 중 intermediate 경로의 파일이 있어서

혹시나 하는 마음에 중간 생성 파일을 모두 지우고 VS project 재생성 뒤 rebuild를 하였다.

 

그 결과 문제 해결...

 

기존의 아무 인자도 없는 Constructor의 build 정보가 코드를 엉키게 하는 것 같다.

 

어쩌면 Unreal을 쓰는 사람들에게는 손 발을 사용하는것 만큼 익숙한 것일수도 있지만 내게는 아직 이런 과정을 거치는 것이 어색하다.

 

나와 같은 문제를 겪는 사람들은 고통을 받기 전에 Rebuild를 한번 해보자.

'메모장 > 개발 지식' 카테고리의 다른 글

C++ Lambda Capture 주의사항  (0) 2021.11.13
Print client side log in listen server  (0) 2020.06.25
UE4 2개 이상의 Layered blend per bone  (1) 2019.12.20
창문 달린 벽 만드는 법  (0) 2019.08.31
샷건 탄환 구현  (0) 2019.07.29

서류 몇개 더 떨어지고 정말 간만에 개발을 하다가 막혔던 부분 중 공유하면 좋을 것 같아서 적어봅니다.

 

Animation에는 Layered blend per bone이라는 노드가 있습니다.

 

기존의 포즈에 지정한 포즈를 특정 bone을 기준으로 일부만 적용 할 수 있는 노드입니다.

 

움직이면서 상호작용, 점프 공격 등을 이로 구현을 하였는데 구현하면서 문제가 있었습니다.

 

구현해야 할 Layered pose는 2개인데 노드에 포즈를 추가하면 제대로 작동을 하지 않았습니다.

 

한참을 뒤적이다가 다음 페이지를 찾고 시도한 결과 문제를 해결할 수 있었습니다.

 

https://answers.unrealengine.com/questions/233385/view.html

 

Layered blend per bone and multiple slots - UE4 AnswerHub

Hello My character has two attack types. One is a melee attack, the other is a type of whirlwind spin attack. I've set them up with different slots in the animation montages. The slot for the melee attack affects the character from spine and up, so you sti

answers.unrealengine.com

이와 같이 Montage를 두 Layered blend per bone 노드 사이에 배치를 하면 무사히 두 Layered Pose가 적용이 됩니다.

 

한국어로 적어놓으면 누구라도 찾아서 도움이 되겠죠...

'메모장 > 개발 지식' 카테고리의 다른 글

Print client side log in listen server  (0) 2020.06.25
FObjectInitializer constructor fatal error c1853  (0) 2020.04.20
창문 달린 벽 만드는 법  (0) 2019.08.31
샷건 탄환 구현  (0) 2019.07.29
기능 구현 - Zoom  (0) 2019.07.08

+ Recent posts