메모리
Data segment : 초기화된 데이터 -> 전역변수(global), 정적변수(static), 구조체, 배열
BSS segment : 초기화되지 않은 데이터 ->Data segment에서 초기화되지 않은 부분..
Text(=Code) segment : cpu에 의해 실행되는 코드가 저장되는 부분 (기계어로 컨트롤?!)
-> 함수, 상수, 제어문
Heap segment : malloc()함수(C언어) 등으로 동적으로 할당된 메모리
Stack segment : 현재 존재하는(잠시 사용 후 사라지는) 데이터.. 즉 임시 메모리
-> 리턴주소, 지역변수, 매개변수
* stack만 하위로부터 할당, 나머지들은 상위로부터 할당
** 찾아보니 stack이 상위로부터, 나머지가 하위로부터 할당된다는 말도 있다... 기준을 어떻게 잡느냐에 따라 다른 듯...
*** 스택은 밑으로 자라나고(High->Low), 힙은 위로 쑥쑥 큰다 (Low->High)
<+추가>
DMA (Direct Memory Allocation) ;
동적 메모리 할당.
Heap 사용.
SMA (Static Memory Allocation) ;
정적 메모리 할당.
Data&Stack 사용.
Data는 프로그램 시작시 할당, Statck은 함수 실행시 할당.
종료시에는 모두 반환.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//This is just Memory Example
#include<stdio.h>
int fuction_ex(int num) //STACK(parameter)
{
num*=2; //TEXT(=CODE)
return num; //STACK
}
double a=10; //DATA
double a2; //BSS
int main(void)
{
int b=20; //DATA
static float c=30; //DATA
char d[20]; //DATA
long e; //BSS
int *ptr;
ptr=malloc(10); //HEAP
free ptr;
function_ex(30); //STACK(parameter)
return 0;
}
(http://hilite.me/ 이용)
'Programming' 카테고리의 다른 글
CGI (0) | 2015.08.24 |
---|---|
Program Bug (0) | 2015.08.21 |
programming for media arts (0) | 2015.07.16 |
프로그래밍2 (0) | 2013.01.16 |
프로그래밍1 (0) | 2013.01.16 |