[cs, c++]메모리에 대한 고찰
메모리 구조의 관한 여러가지 정보
동적할당의 메모리 구조는 이제는 모를수가 없다
C++로 개발을 하는 입장에서는 메모리를 신경써야 하는건 누구나 알고있다.
코딩테스트를 보는 대부분의 개발자가 Python과 C++을 이용한다.
어떻게 보면 아주 상반된 두 언어가 파이를 크게 가져가고 있다는 것이다.
나는 내가 공부하고 있는 언어를 어떻게 다뤄야 좋을까?
게임개발에 저급의 언어가 쓰이는 이유는
불필요한 작업을 최소화 하여 최적화를 하는것에 있다.
최적화
그래서 이 최적화는 메모리 간편화 등을 통해 여러번 수행하게 된다.
런타임 도중에 동적할당을 하는것은 퍼포먼스에 큰 영향을 줄 수가 있다.
오버헤드를 줄이는것은 게임개발자의 숙명이기에 오브젝트 풀이나
스레드 풀 등을 사용하기도 한다.
하지만 메모리의 관리는 또한 댕글링포인터 등에 의한 버그를
사전에 방지하는, 유지보수가 용이한 코드를 작성할 수 있는 능력도 중요하다.
스마트포인터
언어를 처음 배울 때 포인터의 개념을 이해하는데 며칠밤을 새곤 했다.
스마트포인터라고 다를 것이 있을까?
사실 포인터는 매우 많은 경우에 사용하기 때문에 어떠한 프레임워크를 짜더라도
어렵지 않게 익힐 수 있다.
물론 이중포인터나 참조자가 붙으면 어지럽긴 하다.
하지만 우리가 개발하는 과정에서 각을 잡고 프레임워크를 짤 경우를 제외하면
스마트포인터를 사용해 본적이 있는지가 궁금하다.
2D게임을 만들때도 엔진파트를 완성시키고 나면 결국 게임의 동작에만 시간을 쏟곤 했는데,
스마트포인터를 활용할 생각은 못했던 것 같다.
C++의 강력함
STL과 Template 그리고 Modern C++ 덕분에 다른 저급 언어들 사이에서도
C++이 살아남을 수 있었다고 본다.
러스트, C# 수많은 예비군들이 있지만 지금의 현역이 너무 쟁쟁하다
굳이 이런 프레임워크들을 두고 다른 언어로 옮길 필요성이 전혀 없을 정도로
게임에서는 c++ 엠파이어가 자리잡고 있다.
이곳에서의 권력이자 힘은 언급한 강력한 기능들을 활용하는 것에 있다고 생각한다
마치며
영어권 사람들이 단어장을 피고 영단어를 외우는 광경을 본적이 없듯이,
공부의 완성이라고 함은 결국 그 지식을 일상적인 수준으로 활용하는 단계라고 생각한다.
추상클래스, 추상생성자 같은 주니어개발자가 질문을 듣고 한참을 고민하다가,
머리속 저 깊은곳에서 끄집어내는 지식들은 내 것이 아니라는 생각이 든다.
내가 모든것을 완벽하게 하려면 시간이 부족하겠지만, 항상 꾸준히 하려고 노력한다.
댓글 남기기