80 likes | 494 Views
Memory Layout. 2006242108 전중현. Memory 구조. Text 영역 Program 코드영역 (CPU 에 의해 수행되는 기계어 명령어들이 모여있는 곳 ) Data 영역 전역변수와 정적 (static) 변수가 할당된 곳 . 프로그램 시작과 동시에 할당되고 프로그램이 종료되어야 메모리에서 소멸된다 . (1) 초기화된 데이터영역 . (2) 비초기화된 데이터영역 . Bss (block started by symbol) 라고도 함 Stack 영역
E N D
Memory Layout 2006242108 전중현
Memory 구조 • Text 영역 Program코드영역 (CPU에 의해 수행되는 기계어 명령어들이 모여있는 곳) • Data 영역 전역변수와 정적(static)변수가 할당된 곳. 프로그램 시작과 동시에 할당되고 프로그램이 종료되어야 메모리에서 소멸된다. (1) 초기화된 데이터영역. (2) 비초기화된 데이터영역. Bss(block started by symbol)라고도 함 • Stack 영역 지역변수와 매개변수가 저장되는 곳. 이 영역에 할당된 변수는 함수 호출이 끝나면 사라진다. • Heap 영역 동적 메모리 할당하는 곳. 프로그래머가 할당 및 해제를 해주어야 한다.
#include <stdio.h> #include <malloc.h> static int a, b=10; intc,d=10; void foo(int x) { int y, *f = malloc(10); static intz,v=10; printf("foo함수의초기화된내부변수x의메모리위치: 0x%X\n",&x); printf("foo함수의비초기화내부변수y의메모리위치: 0x%X\n\n",&y); printf("foo함수의비초기화정적변수z의메모리위치: 0x%X\n",&z); printf("foo함수의초기화된정적변수v의메모리위치: 0x%X\n\n",&v); printf("foo함수의동적할당된f의메모리위치: 0x%X\n",&(*f)); printf("foo함수의포인터변수f의메모리위치: 0x%X\n\n",&f); } void main() { int *p, q, r=10; printf("main함수의메모리위치: 0x%X \n",&main); printf("foo함수의메모리위치: 0x%X \n\n",&foo); printf("비초기화정적변수a의메모리위치: 0x%X \n",&a); printf("초기화된정적변수b의메모리위치: 0x%X \n\n",&b); printf("비초기화전역변수c의메모리위치: 0x%X \n",&c); printf("초기화된전역변수d의메모리위치: 0x%X \n\n",&d); p = malloc(10); printf("main함수의비초기화내부변수q의메모리위치: 0x%X \n",&q); printf("main함수의초기화된내부변수r의메모리위치: 0x%X \n\n",&r); printf("동적할당된변수*p의메모리위치: 0x%X \n",&(*p)); printf("main함수의포인터변수p의메모리위치: 0x%X \n\n",&p); foo(1); free(p); } Memory b foo a v c d f z *p *f q r p x y main Text영역 0x418000 0x13FF64 0x13FF58 0x35D20 0x418154 0x41817C 0x418004 0x418008 0x41112C 0x41114A 0x35D58 0x13FF54 0x13FF48 0x13FF60 0x13FF74 0x418150 Data영역 Bss영역 Heap영역 Stack영역
Text영역 Data영역 Bss영역 Heap영역 Stack영역