목록분류 전체보기 (349)
나만의 작은 도서관
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. Atomic객체의 exchange 패턴Atomic 객체는 원자적 연산을 지원하는 함수들이 존재한다. 대표적으로 자주 사용하는 load나 store도 있겠지만, 값을 교체하는 exchange도 꽤 자주 사용된다. 오늘은 이 exchange에 대해 사용하는 패턴을 좀 더 자세하게 알아보았다.그전에… 왜 락을 걸지 않고 Atomic을 사용하는가?락은 필요할 때만 걸어두는 거지, 안 걸 수 있으면 최대한 걸지 않는 것이 좋다. 오버헤드 관점에선 Atomic도, Mutex를 이용한 락도 꽤 먹어주지만, 락은 코드 흐름 자체를 막아버리기 때문에 데드락 발생 가능성이 존재한다.반면, Atomic은 락을 사용하지 않아 데드락 발생에 대..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. T()는 기본 타입에도 적용할 수 있는 문법인가?ServerCore 부분에 작성되어 있던 LockQueue를 다시 보고 있던 와중, Pop() 함수의 리턴값이 T()인 것을 발견했다.클래스는 생성자가 있으므로, T가 클래스 타입이면 T()와 같이 적어도 문제가 없겠지만, int와 float와 같은 기본 타입에 ()를 붙여 반환하는 것이 가능한 지 의문이 들었다.생성자도 없는 기본 타입을 저장하는 LockQueue라면 문제없이 돌아갈까?기본 타입에서도 T()는 유효하다.찾아보니 C++에서 int, float와 같은 기본 타입들은 모두 값 초기화(value initalization)를 지원하며, T()와 같은 방식으로 초기화..

주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] Actor, Pawn, Character, Controller언리얼에서 블루프린트 클래스를 새로 만들려고 하면 창 하나가 뜨는데, 창에 뜬 목록들을 보면 위와 같이 유니티에선 없었던 Actor, Pawn과 같은 애들이 있다. 오늘은 이 애들의 용도가 뭔지, 어떤 상황에서 사용하는지 알아보기로 했다.Actor, Pawn, Character는 상속 관계에 있는 클래스들이다.Actor, Pawn, Character 이 셋은 상속 관계로 묶여있는 애들이다. 즉, 이 셋 중에서 Actor가 가장 Base가 되는 클래스이며, Actor → Pawn → Character 순으로 상속 관계를 가진다.위 셋은 무엇을 위한 클래..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. github은 100MB 이상의 파일을 push 할 수 없다.기본적으로 git은 여러 개의 작은 소스 코드 파일들을 추적하기 위한 VCS(Version Control System)이므로, 과하게 큰 파일을 추적하는 것은 소스 코드가 아닐 가능성이 높다.위와 같은 이유에서인지 Github에서는 100MB 이상의 파일을 Push 할 수 없게 제한을 두고 있는데, 이 제한 때문에 자원(Resource)에 해당하는 파일들이 너무 크면 용량 제한에 걸려 못 올리는 경우가 생긴다.예시로, 언리얼 프로젝트에서 사용한 NPC, 몬스터의 에셋들은. uasset이라는 확장자 파일로 존재하게 되는데, 이러한 에셋들의 용량은 100MB를 넘어..

주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. [언리얼] 블루프린트 클래스 추가 시 만들어놓은 클래스가 ALL Class에 뜨지 않을 때 해결법블루프린트를 삭제한 후에도 해당 클래스 정보가 캐시에 남아있어서 새로운 블루프린트 생성 시 All Classes 목록에서 사라지는 현상이다.가장 간단한 해결 방법으로, 에디터를 재시작하면 된다고 한다. 하지만 불행하게도 에디터 재시작으론 해결되지 않았다. 그래서 아래 폴더들을 삭제해서 해결했다.[프로젝트폴더]/Binaries/[프로젝트폴더]/Intermediate/[프로젝트폴더]/DerivedDataCache/[프로젝트폴더]/Saved/(참고로 위 폴더 4개를 지우고 나면 비활성화 해두었던 언리얼 설정이 사라지기 때문에 재설정..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. shared_ptr은 thread-safe 한가?C++에서는 자원(동적 할당한 메모리)의 할당 및 해제를 알맞은 정책으로 관리하기 위해 포인터를 래핑 한 클래스, 즉, 스마트 포인터를 사용한다.스마트 포인터는 자원의 생명 주기를 관리해 주기 때문에 몇 가지 조심하기만 한다면(ex. 순환 참조 문제) 자원을 사용하는 데 있어 모든 게 해결된 것만 같다. 그렇다면 멀티 스레드 환경에서도 스마트 포인터는 안전할까?일부만 thread-safe 한 스마트 포인터스마트 포인터(이하 shared_ptr이라고 부름)는 자원을 가리키는 포인터와 refCount로 구성되어 있다(엄밀히 따지면 아니긴 하지만).스마트 포인터는 refCount..