일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- 리빙앤트리 펠리컨 박스 대
- 8052 블랙라인 정사각 세면기
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 긍정
- 위드리빙 대용량 옷 수납 방수 바구니
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- 두칸 프릴 오버핏 후드티
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- ipTIME 유무선공유기
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 올리비아 스텐 세면대 세트
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 네스파 다야몬드은박 후드티
- 샤오미 미밴드 7 스마트밴드
- 삼성 갤럭시워치5
- 1개
- ChatGPT
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 반스 올드스쿨 VN000D3HY28
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- Today
- Total
냥집사의 개발일지
C언어 - 메모리 동적 할당 (malloc) 본문
안녕하세요 오늘은 메모리 동적 할당에 대해 정리해보겠습니다.
일반적인 정적 할당은 Compile 단계에서 할당되지만 동적 할당은 runtime 시 메모리에 할당되는 특징이 있는데요.
먼저 메모리 동적 할당하면 빠질 수 없는 malloc, free 함수의 예제를 보면서 정리해보아요~
#include <stdio.h>
#include <stdlib.h>
int main(){
int *pi;
pi = (int *)malloc(sizeof(int));
if(pi == NULL){
printf("out of memory");
exit(1);
}
*pi = 5;
printf("*pi : %d\n",*pi);
free(pi);
return 0;
}
1. malloc, free 함수는 stdlib.h 헤더 파일에 선언되어 있습니다.
2. 동적 할당 하는 법
포인터 변수 = (할당할 포인터 변수의 자료형) + malloc(포인터 변수가 가리키는 자료형의 크기)
ex) pi = (int*)malloc(sizeof(int))
3. pi가 NULL 일 때 : 메모리가 부족하다는 뜻이므로 예외처리를 해줍니다.
4. free 함수를 이용해 할당한 메모리 영역을 반환합니다.
c 언어에서 메모리 관리는 중요한 부분인데요.
동적 할당 후 free 즉, 메모리 영역을 해제하지 않으면 계속 점유하여 메모리 누수 발생의 확률을 높입니다.
메모리 해제를 하지 않아도 문법적으로 틀린 것은 아니므로 compiler에서 오류를 띄우지 않습니다.
따라서 효율적인 메모리 사용을 위해 반드시 메모리 사용 후 해제를 해주어야 합니다.
아래 결과처럼 동적 할당된 포인터 변수 pi로 정수 5를 출력할 수 있음을 확인했습니다.
두 번째 예제로 동적 할당 영역을 배열처럼 활용해 보겠습니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int *pi;
pi = (int *)malloc(5 * sizeof(int));
if(pi == NULL){
printf("out of memory");
exit(1);
}
for(int i=0; i<5; i++){
pi[i] = i;
printf("pi[i] : %d\n",pi[i]);
}
free(pi);
return 0;
}
pi = (int*)malloc(5 * sizeof(int)) => 포인터 변수가 가리키는 자료형의 크기가 정수형 5개
즉, 5개의 정수형 요소를 가진 배열을 할당한 것과 같은 기능을 합니다.
동적 할당을 하는 이유
1. 최근 메모리의 저장 공간은 과거와 비교해서 상대적으로 충분하지만
여전히 리소스 관리 측면에서 동적 할당이 필요합니다.
예를 들어, 프로그램 실행 시 크기가 큰 프로세스가 계속해서 메모리를 점유하고 있다면
비효율적이라는 것을 예상할 수 있습니다.
프로세스가 필요할 때마다 동적 할당을 통해 메모리 할당 및 해제를 반복하면
리소스를 더욱 효율적으로 관리할 수 있을 것입니다.
2. 변수의 크기를 예측할 수 없을 때 동적 할당이 필요합니다.
메모리 할당의 크기를 너무 크게 잡아 메모리의 낭비가 있을 수 있고
반대로 메모리 할당의 크기를 너무 작게 잡아 메모리의 부족이 있을 수 있습니다.
동적 할당은 메모리의 필요에 따라 할당을 요청할 수 있어 위의 문제에 해결책이 될 수 있습니다.
오늘은 전반적인 메모리 동적 할당에 대하여 정리해보았습니다.
다음 포스팅에서는 malloc 이외의 동적 할당 함수와 기타 동적 할당 저장 공간의 활용을 다뤄보겠습니다.
좋은 하루 보내세요~~
'C언어' 카테고리의 다른 글
C언어 - 메모리 동적 할당 (문자열) (0) | 2022.09.22 |
---|---|
C언어 - 메모리 동적 할당 (calloc, realloc) (0) | 2022.09.21 |
C언어 - void 포인터 (void Pointer) (0) | 2022.09.19 |
C언어 - 함수 포인터 (Function Pointer) (0) | 2022.09.18 |
C언어 - 배열 포인터 (pointer to an array) (0) | 2022.09.17 |