1577, 79/79 회원가입  로그인  
   sihun1113
   C언어3-메모리와 변수(추가용어)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1737 [복사]


* 메모리

컴퓨터를 살 때 2GB니 4GB니 하는 RAM 메모리를 생각하시면 됩니다.

먼저 하나의 프로그램(파일)이 어떻게 나뉘어지는지를 알려드릴게요. 하나의 실행 파일은 크게 command 부와 data 부로 나눌 수 있습니다.

command 부는 각종 명령행들 즉, 대입, 연산, 분기 등등의 명령어들이 배치 된 부분이구요, data 부는 각종 상수, 초기값, 상황에 따라 음성이나 영상 데이터 등도 포함이 됩니다.

프로그램이 실행이 되면, 그 프로그램은 가장 첫 줄부터 명령어들을 실행해 가면서 필요에 따라 data부에 있는 각종 데이터들을 읽어오게 되고, 이때 읽어 온 데이터를 임시로 저장 할 공간이 필요해 집니다. 그것이 바로 메모리입니다.



* 할당

그러나 단순히 메모리가 필요하니 쓰겠다고만 한다면 여러가지 문제가 생길 수 있습니다. 요즘의 경우에는 어지간한 게임 하나도 1~2G의 메모리를 요구하는 경우가 허다한데, 이러한 메모리를 효율적으로 관리하지 않는다면, 마구 어질러진 방 처럼 될겁니다. 어디에 뭘 놔뒀는지도 모르고, 아무리 내가 연필을 책상 위에 놔 뒀다해도 누군가가 마음대로 연필을 가지고 나가버렸다면, 그 연필을 찾을 방법이 없게 되는거죠. 때문에 한명의 관리인(OS)을 두고 요청에 따라 '넌 여기서 여기까지 쓰고, 넌 저기서부터 저기까지 써라'라는 식으로 공간을 잘라주는 방법을 필요로하게 된거죠. 이 때 이 관리인이 공간을 잘라주는 과정을 '할당'이라고 합니다.



* 선언

그렇다면 관리인은 어떻게 공간을 나누어 줄까요? 거기에는 분명히 '프로그램'으로 부터의 요청이 있었을 것 입니다. '21자리수 덧셈을 할 수 있는 책상이 필요해'라고 관리인에게 말하면, 관리인은 '이 녀석은 길이가 기니까 책상 하나론 안되겠네? 그럼 두개를 줘야겠다'라고 해서 'C열 7번이랑 8번 책상에서 해'라고 지정해 줄 겁니다. 이때 '21자리수 덧셈을 할 책상이 필요해'라고 관리인에게 요청하는 과정을 '선언'이라고 합니다. 즉, 프로그램이 선언을 하면, OS가 메모리를 할당 해 주는거죠.



* 초기화

선언을 통해 할당을 받은 책상은, 때론 깨끗할 수도 있고, 더러울 수도 있습니다. 초기화란 이 책상을 청소하는 것과 마찬가지입니다. 또, 더 나아가서 작업에 필요한 기본 도구를 준비해 놓는 것 까지도 초기화의 단계라고 할 수 있지요. 초기화가 필요한 것은 굉장히 단순한, 그러나 중요한 이유입니다. 예를 들어서 현재 할당 받은 책상에서 새하얀 면사포를 만들어야 하는데, 그 전 사용자가 온갖 페인트를 떡칠해 놓고 갔다면 어떤 일이 생길까요? 어이없다고 생각되실 지 모르겠습니다만.. 그 책상을 치우는 것은 어디까지나 '현재 사용자의 몫'입니다. 다른 어떤 누구도, 심지어 OS조차도 그것을 청소해야 할 의무가 전혀 없습니다. 아쉬운 놈이 우물 파야 하는 상황입니다만..어쩌겠습니까? 수 많은 연구 끝에 가장 효율적인 방법이라고 해서 만들어 놓은 규칙이라는데 말이죠 ^^;



* 헤더

헤더라는 것은 서로 연관이 있고, 잘 쓰이는 명령어들을 미리 만들어 모아 둔 명령어 모음입니다. 코드를 짤 때 맨 첫 줄에(일반적으로) #include <stdio.h> 나 #include <stdlib.h>같은 코드를 입력하셨을 텐데요, 이것이 바로 '헤더'를 여러분의 코드에 포함시키는 과정입니다. #으로 시작하는 명령어는 전처리문이라고 해서 좀 더 공부를 하신 다음에 배우셔야 할 부분이니 지금은 넘어가도록 하죠. 아무튼, 보통은 저 명령줄을 그냥 '당연히 넣어야 하니까'...라며 쉽게 지나치셨을 겁니다. 그런데, 여러분이 코드를 작성 할 때 들어가는 모든 명령 함수는 사실 저 '헤더'파일들에 정의가 되어 있다는 걸 아시나요? 예를들어 printf() 함수나 scanf() 함수 같은 것들 말이죠. stdio.h 라는 이름을 분석해 보면 이렇게 됩니다. 우선 헤더명인 stdio라는 것은 STanDrd Input Output 의 약자로 c에서 필요로하는 기본 입출력, 즉 키보드 입력이나 화면 출력등을 총괄하는 대부분의 명령어가 포함이 되어 있습니다.

확장자명인 h는 header 의 약자죠. 즉, stdio.h 는 [표준입/출력 함수 헤더]가 됩니다.

헤더 파일은 꼭 만들어져 있는 것만 쓰는 것이 아니라, 여러분이 직접 만들어서 사용 할 수도 있습니다. 헤더 작성/사용, 헤더 함수 등에 관해서는 초보 단계를 넘어서는 관계로 여기서는 다루지 않겠습니다.





일단은 여기까지 하구요, 이 외에도 궁금한 용어들이 있으시다면 댓글로 달아주세요. 제가 아는 한 설명하도록 노력 해 볼게요 ^^;;
[출처] [C기초] 03 - 위 스터디에 사용된 용어 몇가지... (C언어를 배우자) |작성자 때릴꺼야


  Hit : 5712     Date : 2011/05/01 11:23
[불법/스팸글로 신고하기]



    
17   < 리눅스 참조 가이드 > 1     사용중
08/02 6447
16   #01 Protel CAD - 서문     아이프리드
11/21 9958
15   완벽하게 파일을 지우는 방법     koresong
10/18 8798
14   리눅스(9) 리눅스 명령어 1~8     사용중
08/02 7589
13   네 트 워 크 강 좌[17]     소유
10/05 17096
12   노즈의 해커스쿨 ftz게임탐방기 LEVEL 2 !! [2]     xownsdk2
08/02 7035
11   [자작] C 강좌 [2] - Memory Allocation[1]     wolverine
07/05 6473
10   [자작] 1. c 언어는 무엇인가(1)[1]     whdgusdl1220
08/16 6529
9   tseug의 네트워크에 관한 이야기 (IP) [1][6]     tseug
11/04 6681
8   해킹기법? (기발하다고 해야하나,웃기다고 해야하나)[35]     whqkdnf000
07/31 11620
    C언어3-메모리와 변수(추가용어)     sihun1113
05/01 5711
6   웹 해킹에대해서 알아보자 (5)[2]     사용중
08/03 8073
5   웹 해킹에대해서 알아보자 (4)      사용중
08/03 7317
4   ;cat 을 사용하는 이유 .[3]     bugfixer2
05/18 9609
3   < 리눅스 참조 가이드 > 4     사용중
08/02 6724
2   리눅스(9) 리눅스 명령어 6. 압축/해제[2]     사용중
08/02 6987
1   버퍼오버플로우 왕기초편 pdf 파일 어디서 구할 수 있나요?     duduwon
02/08 8896
[1]..[71][72][73][74][75][76][77][78] 79

Copyright 1999-2022 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com