이걸 알고 있으면 기본적으로 스텍에 선언해야 할지 아니면 힙에 선언해야 할지 어떻게 해야 내가 생각하는 방식대로 동작을 시킬 수 있을지 판단하는데 많은 도움이 될 것 같습니다.
원본 주소는 아래 있습니다^^.
( http://wwww7.com/bbs/zboard.php?id=Study&page=1&sn1=&divpage=1&category=3&sn=off&ss=on&sc=on&select_arrange=headnum&desc=desc&no=57 )
텍스트 영역 : 일반적으로 프로그램의 실행코드가 존재 하는 영역입니다. 내 자신이 작성한 코드들이 여기에 속합니다.
데이터 영역 : 전역변수나 정적(static) 으로 사용되는 메모리를 의미 합니다. 이를 다시 사용되는 쓰임새에 따라서 3가지로 나눌수 있습니다. 1. 읽기 전용으로 초기화 되는 영역 일반적으로 .rodata가 대표적인 영역 입니다. 이 부분은 const로 선언된 영역 입니다. 그 외에 시스템에 사용된 각종 문자열( print 문의 format string 이나 상수 문자열등이 모두 이곳에 속한다. ) 2. 읽기 / 쓰기가 가능한 영역으로 초기화 되는 영역 .data 영역이 대표적이다. 즉 전역 번수중에 초기값을 가지는 경우를 말한다.
3. 초기화 되지 않은 영역 ( BSS ( Block Started by Symbol )) 영역이라고 불리는 곳 전역변수로 초기화 되지 않고 선언되거나 static으로 선언된 영역을 의미 합니다.
Stack 영역 : 지역 자동변수 , 즉 임의로 메모리를 잡지 않아도 함수의 시작에서 자동으로 생성되 고 파기되는 변수를 말한다. 스코프 영역 ( 함수 영역 )을 벗어나면 스택의 frame 릴레 이에서 해제되므로 자연적으로 파기 된다. 따라서 스코프 안에 존재하는 포인터 변수도 변수 자체는 auto 변수 이다. 그 안에 담긴 주소값의 영역이 다를 뿐이다.
힙 ( heap ) 영역 : 힙은 일반적으로 malloc(3) 과 같은 메모리 할당 함수를 사용할 때 받는 메모리 영역으로서 자동으로 파기 되지 않고 , 힙은 극히 큰 공간이다. 즉 메모리의 전체라고 해도 과언이 아니다.
* 변수의 메모리 위치와 특성
-- 전역 변수들의 형태에 따른 메모리 위치 int num; => bss 영역에 위치 int num = 1; => data 영역에 위치 char str[] = "hello world"; => data영역에 위치, 읽기/쓰기가 가능 char *p_str = "hello world" => 문자열 자체는 rodata에 위치 하고 p_str 포인터 변수는 data 에 위치 const char str[] = "hello world" => 문자열 자체는 rodata에 위치하고 str 변수 자체는 data에 위치 static int i_val; => bss 영역에 위치 |
http://wwww7.com/bbs/zboard.php?id=Study&page=1&sn1=&divpage=1&category=3&sn=off&ss=on&sc=on&select_arrange=headnum&desc=desc&no=57