본문 바로가기

전체 글28

빌어먹을 4바이트 가상함수 테이블 포인터 면접관님이 가상함수의 동작방식과 가상 소멸자를 왜 사용하는지 면접에서 물어보셨다. "가상함수는 virtual 선언하면 그 클래스의 가상함수테이블에 해당 함수의 키값과 주소가 적힌 테이블이 하나 만들어집니다. 그리고 만약 어떤 클래스가 부모로부터 virtaul 키워드가 붙은 함수를 상속받는다면 그 함수를 오버라이드 하지 않는 이상, 해당 함수가 테이블에서 부모의 virtual 함수 이름과 함수주소가 적힌 테이블로 남게됩니다. virtual 소멸자는 어떤 클래스가 상속을 받았을 때, 소멸자에 virtaul 키워드를 붙이지 않으면 부모의 소멸자만 실행되는 반면 자식의 소멸자는 실행되지 않습니다" 이렇게 말했다. 면접관님은 "그럼 다 virtual을 쓰지 왜 virtual을 쓰지 않을까요?" 나는 " virtu.. 2022. 11. 25.
Zero-Copy 이게 뭐더냐? 이것도 면접에서 나왔다.. 클라이언트 직무로 지원해서 이런건 안나올줄 알았는데.. Zero-Copy라는 걸 처음 듣고 머리가 띵해졌다. 진짜 처음 들어봐서 찾아보니 있더라.. 서버를 깊게 공부하지 않아서 몰랐나보다 Zero-Copy는 내가 IOCP서버를 공부하며 만들 때 나도 모르게 쓰이고 있었다. IOCP와 뗄레야 뗄 수 없는 Overlapped IO라는 친구에 의해서 사용된다고 하던데.. 이는 일반 소켓이 아닌 WSAsocket을 만들어야 사용할 수 있다. 왜냐? 비동기 논블로킹 모델이니까! 일반 소켓은 동기,블로킹이다.. 그리고 WSArecv 나 WSAsend의 매개변수를 자세히 보면, overlapped 어쩌고 하는 부분이 있다. 그 부분에 사용을 하는건데, 이 부분을 NULL로 밀지말고 유효한 .. 2022. 11. 25.
블로킹 vs 논블로킹? 동기 vs 비동기? 관점차이에 대한 주제다. 처음에 서버 공부를 할 때, 여러 서버 모델을 배우는데 Blocking이 sync, Non-Blocking이 Async인건가? 하면서 의아했었다. 나는 처음에 그냥 같은걸 다르게 말하는건줄 알았는데, 이게 면접질문에서 나와서 당황한적이 있어서, 다시는 안까먹을려고 여기에 글 쓴다. 이건 그림 필수다. 그림을 보자. 이미지 출처 : Homo Efficio님 블로그 이 그림만 보면 대충이라도 Bloking sync와 Non-Blocking Async의 차이를 말할 수 있다. 그림에 나와있듯이 Sync Blocking은 그냥 이 시간동안 다른일 못 한다, 반면에 Async Non-Blocking은 다른 일을 할 수있다. 그러면 이제 Blocking Asnyc랑 Non-Blocking .. 2022. 11. 25.
UPROPERTY는 어떻게 동작하는가? 언리얼엔진을 보면 에디터에서 디테일한 정보들을 수정하거나 우리 육안으로 직접 볼 수 있다. 직렬화나 가비지콜렉션, 네트워크 리플리케이션 등 옵션들을 에디터 패널을 이용해서 블루프린트에서도 설정할 수 있지 않은가? 우리가 이 시스템들을 에디터상에서 볼 수 있고 동작시킬 수 있는 이유가 Reflection 기능이다. 그러나 C++은 이런 Reflection개념은 없고 언리얼엔진이 따로 만든거다. 그래서 언리얼엔진이 우리가 작성하는 C++클래스에서 어떤 것이 리플렉션되어야 하는지 추출해 내야 한다. C++로 아무 클래스(빈 깡통말고)를 만들어 보면 UCLASS() 이런게 클래스위에 착 붙어있다. 바로 이게 Reflection 시스템을 사용하기 위한 지정자 U매크로라는 것 이다. 찾아보면 UCLASS()말고도 .. 2022. 11. 25.