1년만에 글을 쓴다.

그동안 여러 일들을 겪으면서 글을 쓰는것을 포기했는데 역시나 글을 쓰는게 좋다.

오랜만에 글을 쓸 때는 역시 쓰고싶은 것을 쓰는게 좋을 것 같아서 평소 생각했던 주제에 대해서 쓴다.

전공 지식도 아니고 그냥 소설같은 주제다.

일을 하는데 문득 메모리에 대해서 생각이 났다.

메모리.

일을 하다보면 잊고 살지만 잊고 살면 안되는 것.

C++ 개발자지만 어느덧 익숙해진 C#과 C++의 스마트포인터, 그리고 선배들이 이미 만들어둔 클래스를 사용하면서 잊고 있었지만, 오늘 메모리 누수 이슈를 찾아보면서 다시 한 번 생각해봤다.

프로그램을 짜다보면 나같은 경우엔 프로그램이 굉장히 복잡하게 여겨진다.

학부생일 때도 복잡하다고 생각했지만 실무에서는 겪어보지 못했던 각종 매크로들과 거대한 규모의 코드량과 복잡하게 섞인 디자인패턴 등으로 인해서 프로그램이란 것은 생각했던 것보다 훨씬 더 복잡하다고 생각했다.

그런데 가끔씩 프로그램의 본질이 메모리라는 것을 알게되면 손쉽게 해결되는 버그들이 있었다.

그럴때면 왜 내가 이렇게 복잡하게 생각했을까? 라고 문득 의문이 든다.

대학교 때 Context Switching이란것을 배웠다.

컴퓨터 구조 수업때 배운 개념이었는데 그 당시엔 제대로 알지도 못하고 머릿속에 집어넣기 급급했다.

그런데 이 개념은 취업준비생일 때 각종 시험 문제로 많이 등장했었다.

각각의 프로세스들이 프로세스 스케쥴링에 의해서 할당된 시간만큼 메모리를 점유해서 사용하는 것을 의미한다.

학부생일땐 그때는 그냥 그렇구나하고 생각했고, 취업준비생일때도 중요하다고 생각했지만 단지 시험문제로 많이 봐서 중요하다고 생각했을 뿐이었다.

그런데 지금은 뭐랄까? 메모리는 뭔가 우리 세계의 땅과 닮았다.

이게 뭔 문학적인 생각일지는 모르겠지만 어느날 문득 메모리 위에 올라간 프로그램을 보면서 생명을 얻은것처럼 보였다.

왜냐하면 메모리가 터져버린 프로그램을 곧바로 종료된다.

아주 정교한 놈이라서 조금만 잘못된 메모리 주소를 참조하면 그대로 프로그램을 강제종료가 발생한다.

보통 이럴 때 '어.. 죽었다!' 이렇게 말하곤 했는데

생명이 존재해야 죽음도 있으니 문득 이렇게 생각한 순간부터 메모리에 올라간 프로그램은 생명을 가진 것처럼 보였다.

그러니 이전에 그냥 별 생각없었던 Context Switching도 뭔가 생명을 잉태시키는 요람같은 개념으로 보인다.

그리고 게임도 그렇다.

'엘더스크롤'같은 거대한 RPG 게임을 하다보면 가끔씩 이런 세계를 구현한 이 게임 프로그램이 너무 대단한게 느껴진다.

보통 CPU 속도를 표현할 때 hz단위를 쓴다. 그냥 한국말로 표현하면 4기가 헤르츠 이렇게 말하곤하는데

1헤르츠는 내가 대학교 교수님한테 들었던 수업에서는 어떤 광물에 빛을 쪼였을 때 나타나는 파동의 단위라고했다.

그러니까 1헤르츠는 보통 컴퓨터 프로그램에서 1틱을 나타내는데 이 1틱은 하나의 연산을 할 수 있다.

이 연산도 우리가 흔히 프로그램 언어(고급 언어)에서 쓰는 연산이 아니라 전자 회로의 가장 기본이되는 연산 회로

AND회로, OR회로, XOR회로 등 하나의 회로를 지나는 연산을 의미한다고 한다.

아무튼 이런 1헤르츠는 이런 연산을 하는 단위라고 생각하면 흔히 4기가 헤르츠는 1초당 4000,000,000번의 연산을 할 수 있다는 소리가 된다.

그리고 이런 엄청난 연산을 통해 잘 짜여진 그래픽 및 내부 엔진 프로그램이 메모리 위해서 구현되고 하나의 게임 세상을 표현한다.

지금 내가 뭘 쓰고있는지는 모르겠는데 음 그러니깐 말하고 싶은 것은 이런 것 같다.

어떤 거대한 시스템도 하나의 세계를 표현한 RPG 게임도 결국 메모리에 올라가야 그 모습을 드러낼 수 있다.

프로그램의 본질은 메모리라는 것.

그리고 이 메모리위에 짜여진 수많은 연산들이 게임이란 현실과 비슷한 세상을 구현한다는 것.

메모리 2d라면 뭐랄까 우리 세상이 4d 기반의 메모리 위에서 구현된 세상같다? 우주가 생긴것도 어두컴컴한게 현실 세계의 메모리같기도 하고...

아 빵터졌다. 갑자기 SF 소설을 쓰고있다.

아무튼 결론은 음 메모리 누수가 났는데 앞으로 메모리 누수가 안나도록 프로그램을 잘 짜도록 하자!

아무리 복잡해보이는 프로그램도 본질은 메모리위에서 돌아간다.

어셈블리어를 유창하게 읽거나 Reversing을 할 수 있다는 것은 이런 프로그램의 이해해 엄청난 도움이 될 것 같다.

학부 때 어셈블리어 수업 D+맞았던 것 같은데 좀 열심히 할 걸 후회된다.

그랬다면 내 능력은 한층 더 발전했을 수도 있었을텐데.

그러니 너무 복잡한 나머지 나 혼자 생각에 매몰되 피하지말고 천천히 하나씩 분석해서 찾다보면 많은 문제가 길이 보이지 않을까. 그냥 그런 생각에 글을 썼다.

끝.

+ Recent posts