티스토리 뷰

Application/C/C++

[강좌] 블럭쌓기 만들기 8일차

알 수 없는 사용자 2011. 9. 26. 15:19

강좌에 들어가기 전에..

이야 이번에도 상당히 오랜만에 강좌를 쓰는것 같습니다..

 

드디어 포인터군요..

사실 전 포인터를 잘 모릅니다..

포인터의 정확한 내용은 알지만 응용을 많이 해보지 않은 터라..

그냥 모른다고 이야기하는게 속편하지요..

제가 아는 선에서 이야기하도록 하겠습니다..

 

 

포인터? c 할줄 알면 다 해야함. 물론 malloc이 뭔지도 알아야긋져? cc에서는 new/delete로 함..

자, 이제 메모리에 관련된 이야기군요..

오늘은 코드 없이 간단한 설명만 하겠습니다..

요즘 java 언어를 많이들 이용하는 이유가, 메모리 관리를 신경쓰지 않고 프로그래밍하기 좋게 만들어진 언어라서 그렇습니다만..

사실 메모리관리는 필수로 알아두어야 한다고 생각합니다..

물론 몰라도 고급언어 프로그래밍(고급 프로그래밍이 절대 아닙니다)은 가능하겠습니다만..

고성능을 요구하는 프로그램은 아무래도 만들기 어려울겁니다..

 

자, 포인터란 뭘까요?

정확히 말하자면, 어떤 변수의 주소값을 말하는거라고 할 수 있겠습니다.

사실, 포인터의 동작 원리를 설명하려면 OS의 메모리 할당에서부터 커널단계까지 들어갑니다만, 그건 나중에 알아서 찾아보세요.

간단한 프로그램 작성하는데 그렇게 스케일이 크면 입을 쩌억 벌리면서 십중팔구 ‘아 씨바 프로그래밍 존나 어렵네’하고 끝날겁니다.

오늘은 그냥.. “포인터는 주소값”이라는 것만 알면 됩니다.

다들 중요하다고 하면서도 어째서 책에는 포인터가 설명이 안되어있는건지 보면 더이상 설명할것이 없어서 그런거지요 ?ㅅ-;;

지금 제가 작성하고 있는 블럭쌓기 프로그램도 요거하나 만드는데 동적할당/해제가 들어가는것도 웃기잖아요..

퍼포먼스 향상을 위한 프로그래밍을 하실때즈음이면 이미 어떤식으로 해결해야 될거다라는 기본적인 개념을 가지고 어디서든 자료를 찾아볼 수 있으시겠지요.

그래도 알아두어야 할것 하나는.. 포인터는 주소값이라는겁니다..

그러므로 32비트용 프로그램하고 64비트용 프로그램하고 달라지는게 뭘까요?

자, 32비트와 64비트 프로그래밍의 차이는 주소의 차이입니다.

달라지는건 포인터가 OS가 32비트면 32비트의 크기, 64비트면 64비트의 크기를 가진다는것만 알면 되겠지요.

 

malloc이란 뭘까요? 말록이란 사람도 있나?

Memory ALLOCation 의 약자입니다.

쉽게 얘기하자면 9일차에 나올 배열을 내킬때마다 할당하는겁니다.

으, 아무래도 초반에 스케쥴을 잘못 잡았습니다 ㅋㅋ

어쨌거나 배열과 malloc이 하는 짓은 OS한테 이야기를 하는겁니다. 공간확보를 하라고.

배열과의 차이점은, 물건(데이터)를 싸야 되는데 나이롱끈(배열)로 묶을것인지 고무줄(malloc)로 묶을것인지 결정하는거구요.

그리고 고무줄은 존나 잘 끊어지죠.. 끊어지면 존나 아픕니다..

뭐, 좀더 부연설명을 하자면 배열은 ‘미리 확보’를 해두니 에러의 확률은 거의 없습니다만..

malloc은 깡패처럼 OS한테 무조건 ‘내놔’하고 드러눕습니다..

malloc으로 확보한 메모리를 다 사용하고 나면 free로 해제를 해주어야 합니다..

그러지 않으면 깡패가 잡고 안 놔줍니다.

 

C++에서는 new/delete라는 명령으로 사용하는데, 이것도 뭐 배열이나 malloc과 마찬가지지요..

 

C / C++이 다른 언어에 비해 어렵다고 느껴지는 이유는 메모리관리때문일텐데요..

메모리관리를 잘 하는 습관이 쓸모없다고 생각하는 사람도 있지만, 제 생각에는 굉장히 중요한 스킬중의 하나라고 생각합니다..

 

메모리 관련이 워낙에 쉽게 설명하기 어려운 것들이라 고민하다보니 많이 늦어졌습니다..

다음 강의는 조금 여유를 두고 작성하도록 하겠습니다..