Language/C
[따배씨] 12.13 메모리 동적 할당
migrationArc
2021. 6. 14. 21:51
따배씨 - 따라하며 배우는 C언어
12강 Storage Classes, Linkage and Memory Management
12.13 메모리 동적 할당 Dynamic Storage Allocation
- 동적 할당 메모리는 포인터만 가져오고 인식자가 없음
- Heap 메모리 영역에 저장, 프로그래머가 반납하기 전까지 유지
- 프로그램이 종료되면 자동 반납
- 필요한 메모리의 크기를 미리 알 수 없을 경우 사용
- Runtime 에 메모리 크기가 결정되는 경우, VLA 가변 길이 배열 등
#include <stdio.h>
#include <stdlib.h> // malloc(), free()
int main(){
/*
malloc() returns a void type pointer.
void% : generic pointer
free() deallocates the memory
*/
double* ptr = NULL;
ptr = (double*)malloc(30 * sizeof(double));
if (ptr == NULL){
puts("Memory allocation failed.");
/*
exit(EXIT_FAILURE) is similar to return 1 IN main().
exit(EXIT_SUCCESS) is similar to return 0 IN main().
*/
exit(EXIT_FAILURE);
}
printf("Before free %p\n", ptr);
// Before free 0x100611950
free(ptr);
printf("After free %p\n", ptr);
// After free 0x100611950
ptr = NULL; // optional
return 0;
}
double* ptr = NULL;
ptr = (double*)malloc(30 * sizeof(double));
- 운영체제에게 메모리를 요청할때는 Memory allocation - malloc() 함수 사용
malloc(필요한 공간 입력, size_t type);
- 입력한 공간 만큼 heap 메모리 공간을 할당
- 할당된 연속된 메모리 공간의 첫번째 주소를 반환
- 반환 값은 void 형의 pointer - generic pointer
(double*)malloc(필요한 공간 입력, size_t type);
- 반환 된 void 형의 pointer 값을 double 형의 pointer 로 변환
if (ptr == NULL){
exit(EXIT_FAILURE);
}
- 메모리 공간이 할당되지 않았을 때의 Error 처리
exit(EXIT_FAILURE);
- 어떤 위치에서든 프로그램 강제 종료
free(ptr);
ptr = NULL; // optional
- 메모리를 반환 하여도 ptr 값은 메모리 주소를 가르키고 있으므로, NULL 처리 하는것이 좋다
#include <stdio.h>
#include <stdlib.h> // malloc(), free()
int main(){
/*
Dynamically Allocated Array
*/
int n = 5;
double* ptr = (double*)malloc(n * sizeof(double));
if (ptr != NULL){
for (int i = 0; i < n; ++i)
printf("%f ", ptr[i]);
printf("\n");
for (int i = 0; i < n; ++i)
*(ptr + i) = (double)i;
for (int i = 0; i < n; ++i)
printf("%f ", ptr[i]);
printf("\n");
}
free(ptr);
ptr = NULL;
return 0;
}
- 동적 할당 메모리를 길이가 변할 수 있는 배열처럼 사용 가능, VLA 보다 동적 할당 메모리가 선호됨
- 동적 할당 메모리를 배열로 사용하면 크기를 변화시키는 것이 가능한 것이 장점
- VLA 는 stack 영역(컴파일러에 따라 다름), 동적할당 메모리는 Heap 영역
- Heap 영역의 크기가 stack의 크기보다 큼
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
실리콘 밸리의 프로그래머 : 네이버 블로그
안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.
blog.naver.com
http://www.inflearn.com/course/following-c
홍정모의 따라하며 배우는 C언어 - 인프런 | 강의
'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원
www.inflearn.com