쾌락없는 책임 (공부)/C++ 짜잘이
-
[C++] 특정 클래스만 함수를 호출할 수 있게 하는 방법 - Attorney and Client Idiom, Passkey Pattern쾌락없는 책임 (공부)/C++ 짜잘이 2023. 10. 22. 15:19
서론 그냥 갑자기 문득 '입력을 한곳에서 받은 뒤 다른 곳에서는 읽기만 할 수 있게 못할까?'라는 생각이 들었습니다. 유니티에서 `Input.~~`로 표현해 사용하는걸 자체적으로 만들 수 없을까 하는 생각이었습니다. 여기서 드는 생각이 '그러면 입력을 받아주는 곳은 한곳이고 나머지는 전부 읽기 전용이어야 한다'입니다. 그러면 **어떻게 특정 클래스에게만 이런 권한을 줄 수 있냐**하는 의문이죠. 결국 이 의문이 커져서 이번에 소개할 `Attorney and Client idiom`과 `Passkey Pattern`을 보게 되었습니다. Attorney and Client idiom 일단 이 방식은 간단합니다. C++에서 제공하는 `friend` 키워드를 사용하는 것입니다. class Some { priva..
-
[C++] vector 는 2배씩 늘어나는게 맞을까?쾌락없는 책임 (공부)/C++ 짜잘이 2023. 9. 21. 20:50
개요 벡터는 용량이 부족하면 더 큰 용량을 할당한 뒤 그곳으로 복사를 한다고 다들 알고 있을 겁니다. 여기서 더 큰 용량 을 생각할 때 '벡터는 당연히 2배씩 용량 늘어나겠지' 싶었습니다. 그런데 일을하면서 사수분이 생겼고 이 사수분이 이런 논제를 하나 던져줬습니다. '진짜 2배씩 늘어나는지 찍어보셨나요?'. 이걸 듣고 핫차 싶어서 시간 날 때 바로 테스트를 해보기로 했습니다. 결론은 마냥 2배는 아니다. 그냥 간단하게 2, 4, 8...등으로 늘어날 수 있게 유도해 봤습니다. 코드는 아래 접은 글에 있습니다. 더보기 #include #include using namespace std; int main() { vector vec; cout
-
[C++] Branchless 가 얼마나 잘 작동할까?쾌락없는 책임 (공부)/C++ 짜잘이 2023. 8. 23. 18:30
개요 원래는 큰 생각 없었던 부분인데 유튜브 알고리즘 덕분에 생각해 볼 자료를 가지게 되었습니다. 이곳에서 Branchless에 대한 이야기를 하고 있었습니다. 저 같은 경우 학교 컴시구에서 if 구문이 명령어로 변경되었을 시 true, false 중 한곳을 맞다고 생각하고 가정한 뒤 계산을 하다가 그 가정이 틀리게 되면 이전 계산을 중지한 뒤 새 계산을 한다는 이론을 알고 있었습니다. 그래서 if문이 없으면 더 빠르지 않을까? 하고 막연하게만 생각해 왔습니다. 이번 영상을 보면서 제 생각이 마냥 옳다는 게 아니라는 걸 알아내서 이번 기회에 이에 대해 한번 적어보려고 합니다. 간단한 메모용으로요. 단순 수 비교에 있어서는 Branchless 보다 컴파일러가 더 믿을만하다 영상 초입에서 나오는 문제사항으로..
-
[C++] ptr[offset], offset[ptr] 은 같은 값이다?쾌락없는 책임 (공부)/C++ 짜잘이 2023. 3. 16. 23:53
개요 악몽같은 영상을 봤다. 여러가지 언어들의 끔찍한 코드들을 보여주는 유머성 유튜브 영상이었는데 다른 언어들 보면서 '캬 뭐 이딴것들이 다 있지?' 하다가 C++이 나오자마자 머리를 탁 칠수밖에 없었다. 아니 뭔 괴상한 코드가 나왔다. 근데 해보니 실행이 된다! 진짜 너무 무섭고 손발이 덜덜 떨리는 끔찍한 모습이 아닐 수가 없다. 혹시나 이런 기괴한 모습을 보고 싶다면 아래 영상의 1:45로 이동하면 됩니다. 결론 - 기존에 사용하는 배열과 같은 이야기 기존 배열의 모습은 '배열이름[인덱스]' 이런 느낌입니다. 이걸 접근하기 위해서 C++에서 주소를 배열이름의 주소(이게 첫 원소의 주소)+인덱스(offset)로 찾기 때문에 위와 같은 일이 벌어질 수 있는 것으로 보입니다. 그야말로 끔찍한 일이 아닐 수..
-
[C++] std::move return은 정말 필요할까?쾌락없는 책임 (공부)/C++ 짜잘이 2023. 1. 22. 11:41
개요 C++11부터의 중요 화두인 R-value reference를 보고 나서 '앞으로 모든 return 에 std::move를 명시해야 하는가?' 란 의문이 생기게 되었습니다. 앞으로 기존에 단순 return 하는 함수들에도 이를 써야 하나 라는 생각을 했는데 이번에 이에 대해서 알아본 결과를 한번 적어보겠습니다. 일단 return std::move() 는 불필요하다 일단 알아본 바로는 move로 반환할 이유가 없다는 것입니다. 먼저 일반적으로 반환하는 경우 컴파일러가 자동적으로 R-value로 변경을 해 줘서 이후 함수 반환값을 통해서 이동 생성자를 부를 수 있다고 합니다. 다만 std::move를 활용하게 되면 컴파일러가 이를 최적화할 여지가 사라진다고 합니다. RVO, NRVO와 copy elis..
-
[C++] sort 함수에 함수 객체가 좋을까 함수가 좋을까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 9. 2. 22:45
서론 Effective STL을 읽는 도중 "함수 객체가 함수 인자로 넘기는데 더 좋다!"라는 이야기가 있었습니다. 이 내용을 요약하면 sort 같은 알고리즘에는 함수 포인터를 넣기보다는 함수 객체를 넣으면 인라인화 되고 빠른데 함수로 정의하는 건 더 느리다라고 하는 이야기입니다. 그런데 이 책이 옛날이어도 워낙 옛날이어야지 bind2nd 같은 이전 함수들이 나오는 책이라서 현재와 비교해야 하는 부분들이 상당히 많은 책입니다. 그래서 이번 항목도 알아보던 중 "정말 이게 빠를까?" 싶어서 한번 비교를 해보고 정리하기로 마음먹었습니다. 일단 코드를 보자, 왜 유의미한 차이가 없지? #include #include #include #include using namespace std; inline bool D..
-
[C++/OS] 메모리 단편화와 해결 방법은?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 28. 21:04
서론 면접에서 단골 질문들이 몇 있는데 그중 하나가 메모리 단편화와 관련한 이야기였습니다. 타 직군 분들은 어떤 질문을 들을지 잘 모르겠지만 게임 회사들에서는 메모리 단편화와 관련한 질문이 많이 있었습니다. 지금까지 이 질문들에 대해서 대답을 만족스럽게 못한 것 같아 이참에 한번 정리를 해 보려고 합니다. 사실 이 글을 OS에서 해야 할까 아님 C++에서 해야 할까 하다가 일단 카테고리는 C++로 넣게 되었습니다. 제가 주로 알아본 게 "C++에서 메모리 단편화"라 이렇게 분류를 한 점 알아주시면 감사하겠습니다. 메모리 단편화란 일단 메모리 단편화에 대해서 알아보겠습니다. 크게 2가지 종류가 있고 "내부 단편화"와 "외부 단편화"가 있습니다. 일단 내부 단편화의 경우 프로세스가 필요한 메모리보다 많은 메..
-
[C++] vector<bool> 보기를 돌같이 해라쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 16. 16:52
서론 현재 C++에 대한 깊이가 부족하다고 생각해 강제로 깊게 만들어주는 Effective 시리즈의 STL을 읽고 있습니다. 이 이펙티브 시리즈는 나온 지 좀 오래된 시리즈라 현재 C++과는 맞지 않는 이야기들이 몇 있지만 눈여겨볼만한, 아직 해당되는 이야기들이 대부분입니다. 이 중 현재 항목들을 1/3 정도 보면서 2번째로 흥미로웠던 부분인 vector에 관련한 이야기입니다. 현재 포스트의 제목도 Effective STL에서 가져온 만큼 여기서 다뤘던 이야기들을 잠깐 기록해보려고 합니다. vector은 일반 다른 컨테이너와는 사뭇 다르다 #include #include using namespace std; int main(){ vector v; v.push_back(true); v.push_back(f..