hello world

Programming +41

메모리

Programming2015. 8. 12. 01:02

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