Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
Tags
- 스택(Stack)
- DFS(Depth First Search)
- 백준 17608번
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 21606번
- 백준 2493번
- 이분 그래프(Bipartite Graph)
- 백준 2812번
- 그래프(Graph)
- 백준 2261번
- 백준 18352번
- 분할 정복(Divide and Conquer)
- 그리디 알고리즘(Greedy Algorithm)
- BFS
- 트리(Tree)
- 이분 탐색(Binary Search)
- 백준 10000번
- 위상 정렬(Topology Sort)
- 백준 1707번
- 백준 2504번
- DFS & BFS
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 동적 프로그래밍(Dynamic Programming)
- 백준 9012번
- 큐(Queue)
- BFS(Breadth First Search)
- DFS
- 위상 정렬(Topological Sort)
- 백준 1948번
- 알고리즘 개념
Archives
- Today
- Total
Always Be Wise
메모리 구조와 동적 메모리 할당 본문
728x90
프로그램을 실행하면 운영체제는 프로그램이 사용할 메모리 영역을 할당한다. 할당하는 메모리 영역은 크게 데이터, 스택, 힙, 코드로
나뉜다. 프로그램이 실행될 때마다 영역을 할당하며, 할당 장소는 메인 메모리(RAM)이다.
데이터 영역
전역 변수와 정적 변수가 할당되는 영역으로 프로그램을 시작하면 할당하고, 프로그램을 종료하면 메모리에서 해제한다.
스택 영역
함수 호출시 생성되는 지역 변수와 매개변수가 저장되는 영역으로, 함수 호출이 완료되면 사라진다.
힙 영역
프로그램이 실행되는 동안 동적으로 생성되는 변수를 저장하기 위한 영역으로, 프로그램 실행 중 결정한다.
동적 메모리 할당시 사용하는 영역이다.
동적 메모리 할당
변수를 선언하는 대신 프로그램의 요청으로 메모리를 할당하는 것을 동적 메모리 할당이라고 한다.
C 언어에서는 malloc 함수를 호출하여 동적 메모리 할당을 요청하면, 요구하는 크기의 메모리를 할당하고 그 시작 주소를 반환한다.
int *p;
// (1)
// 할당받을 메모리의 크기를 바이트 단위로 지정한다. 여기서는 10개의 정수를 저장하기 위해 40바이트를 요청하였다.
p = (int *)malloc(40);
// malloc이 반환하는 주소는 타입이 없는 주소(void *)이다. 정수들을 저장하기 위해 (int *)으로 변환한다.
// (2)
// 같은 의미를 아래와 같은 방식으로도 작성할 수 있다.
p = (int *)malloc(4 * sizeof(int));
if (p == NULL) {
// 동적 메모리 할당 실패 시 적절한 조치를 취한다.
}
// malloc으로 할당 받은 메모리는 아래와 같이 보통의 배열처럼 사용하거나 포인터 변수를 활용하여 사용할 수 있다.
p[0] = 12;
p[1] = 87;
*(p+2) = 23;
'프로그래밍 언어 > C' 카테고리의 다른 글
Keywords와 Identifiers (0) | 2021.12.06 |
---|---|
구조체 포인터 (0) | 2021.12.04 |
구조체 배열 (0) | 2021.12.04 |
typedef를 이용한 구조체 선언 (0) | 2021.12.04 |
구조체란? (0) | 2021.12.04 |
Comments