C++은 프로그래머가 직접 메모리를 관리할 수 있어, 매우 저수준의 영역까지 다룰 수 있는 언어이다. 그런만큼 C++ 프로그래머들은 컴퓨터 메모리의 구조를 잘 알고 있어야 한다. 특히 Heap memory, Stack Memory, Static Memory는 잘 알아야 한다. 또한 메모리 관리를 실패한다면, 병렬 처리를 할 때 False Sharing (두 개 이상의 스레드가 같은 블록 영역의 메모리에 접근하면서, 캐시 성능 저하가 발생하는 현상) 이 일어나 성능이 더 떨어지거나, 혹은 Data Racing (두 개 이상의 스레드가 동시에 같은 메모리에 대해 쓰기 접근하면서, 잘못된 연산을 하거나 서로 데이터에 대한 소유권을 주장하면서 성능이 저하되는 현상) 이 발생하기도 쉽다. 무엇이 됐든 C++을 할..
예약 시스템 개발 계기 우리 학교 2학년 1학기 과정인 객체지향 프로그래밍 과목에서, 전설처럼 내려오는 과제가 하나 있다. C++을 이용한 통합 예약 프로그램인데, C++ 좋아하는 나로썬 참을 수 없는 과제였다. 이 교수님의 객체 과목을 수강한 이들은 이 과제를 해야 객체 과목을 수강했다고 인정하는 분위기다. 바로 시작했다. 실제 과제는 2주라는 시간이 주어졌는데, 이 과제에만 시간을 쏟는다면 모르겠으나 다른 일들이 많아서.. 이거는 완전 사이드 of 사이드라서 얼마나 오래 걸릴 지는 모르겠다. C++ 개발 환경 설정 IDE는 CLion으로 IDE는 별 고민없이 CLion으로 선택했다. 애초에 이 프로젝트를 시작한 이유 중 하나가 CLion에 적응해보려고 한 목적도 있다. 윈도우에서는 주로 Visual ..
iterator, 왜 사용할까? iterator의 개념 먼저 C++로 코딩을 하신다고 하면, 반복자 iterator에 대해서 꼭 아시는게 좋습니다. iterator는 C++98 이전부터 있어왔던 포인터의 일종입니다. 매우 강력한 기능이고, 의외로 C++을 사용할 때 C와 다르게 포인터를 사용할 일이 정말 특이한 경우가 아니라면 거의 없는데, iterator는 정말 많이 사용합니다. iterator에서 가장 많이 사용하는 메소드는 begin()과 end()인데, 각각 컨테이너의 시작점, 그리고 끝점 + 1 칸을 리턴합니다. (그림 출처: cppreference vector begin, end) end()가 가장 끝점이 아닌, 가장 끝점에서 한 칸 더 나아간 위치를 리턴한다는 것을 주의하십시오. 그리고 it..