
코드 섹션과 데이터 섹션
코드 섹션 : 우리가 작성한 소스코드들이 빌드된 결과물들이 저장되는 곳
데이터 섹션 : 전역 변수와 정적 변수 등이 저장되는 곳
스택메모리의 단점
1. 스택메모리에 저장되는 지역변수의 크기는 컴파일때 고정된다. 런타임 때 늘리거나 줄일 수 없다.
2. 함수가 종료되면 종료된 함수 스택 프레임에 접근이 불가능하다. 즉, 함수 안에 지역변수는 함수가 종료될 시 같이 사라진다.
3. 지역변수가 사라지는 걸 막기위해 전역변수 혹은 정적변수로 선언해야 하지만 그건 또 너무 그것대로 과분하다.
스택 메모리의 단점을 없앨 힙 메모리에 대해
프로그래머가 관리할 수 있는 동적 할당 영역이다.
엄연히 스택 메모리와는 다르다.
프로그래머가 원하는 만큼 원하는 때에 할당 및 반납이 가능하다.
무적은 아닌 힙 메모리의 단점
1. 스택메모리에 비해 할당/해제 속도가 느리다.
2. 효율적인 메모리 관리가 어렵다(까다롭다)
3. 프로그래머가 직접 메모리 할당 및 해제를 해야한다. (할당만 하고 해제를 하지않는 실수의 여지가 있음.)
중요한 동적 할당의 세 가지 단계
1. 메모리 할당(대여)
힙 메모리 관리자에게 필요한 바이트만큼의 메모리를 달라고 요청한다.
힙 메모리 관리자는 해당 크기의 연속된 메모리를 찾아서 반환한다.
반환된 값은 시작 메모리 주소이다.
2. 메모리 사용
할당된 힙 메모리 시작 주소를 가지고 원하는 작업을 수행
이때 할당된 메모리 속 데이터는 쓰레기값이 들어있음.
3. 메모리 해제(반납)
힙 메모리 관리자에게 해당 메모리 주솔를 돌려주며 다 썼다고 알림.
관리자는 해당 메모리를 점유되지 않은 메모리 상태로 바꿈.
메모리를 돌려주지 않으면 누수가 발생하기 때문에 꼭 반납하여 해제하는 것이 중요함
*메모리 누수란?
메모리가 점유 상태를 벗어나지 못해 사용가능한 메모리가 줄어드는 현상이다.
동적 메모리 관련 함수
할당: malloc()
void* malloc(size_t size)
해제: free()
void free(void* ptr)
*malloc() 작성했다면 곧바로 free()을 작성하여 메모리 누수를 예방하는 좋은 습관을 들이자.
*중요샘플코드*
// Main.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
size_t i;
int* Nums = (int*)malloc(10 * sizeof(int));
if (NULL == Nums)
{
return 0;
}
// Do something....
free(Nums);
Nums = NULL;
if (NULL != Nums)
{
// TODO.
}
return 0;
}
'C' 카테고리의 다른 글
| 주소연산자와 역참조 연산자 뒤섞기(2) (0) | 2026.02.27 |
|---|---|
| 챕터 2-3 : 형변환 연산자, 삼항 연산자, sizeof (1) (0) | 2026.02.26 |
| # 챕터 2-2 : 증감 연산자, 논리 연산자, 비교 연산자 (1) (0) | 2026.02.26 |
| 챕터 2-1 : 연산자와 피연산자, 산술 연산자, 복합 대입 연산자, 값식문 (1) (0) | 2026.02.26 |
| 챕터 1-11 : 입력 기초 (0) | 2026.02.25 |