-
malloc 개념, 기초 쉽게 정리Programming/코딩공부 2022. 4. 18. 11:45
<cstdlib> (stdilib.h)
void* malloc (size_t size);
size_t : unsigned int (메모리 사이즈 나타낼 때)
1. 기본개념(정의)
Allocate memory block
Allocate a block of size bytes of memory, returning a pointer to the beginning of the block.
메모리의 사이즈 바이트 블록을 할당하고, 포인터를 반환한다 블록의 시작부분의.(직역)
The content of the newly allocate block of memory is not initialized, remaining with indeterminate values.
새롭게 할당된 메모리의 블록이 초기화 되지 않았으면, 불확실한(미정) 값으로 남아있는다.
If size is zero, the return value depends on the particular library implementation (it may or may not be a null pointer),
but the returned pointer shall not be dereferenced.
dereferenced - e가 굉장히 많이 들어가는 단어네...사이즈가 0이면, 반환값은 특정 라이브러리에 달려있다(null 포인터일 수도, 아닐수도 있다)
그러나 반환된 포인터는 역참조 되지 않는다.
shall not = 하지 않는다
reference가 참조니까 dereference는 역참조의 의미
2. 그래서, 이게 뭔데? 왜 쓰는건데?
pointer = malloc(size)
Return value(반환값) : 성공시 메모리 주소 반환, 실패시 NULL 반환
메모리를 사용하기 위해 malloc 함수로 사용할 메모리 공간을 확보해야합니다.(memory allocation)
메모리를 왜 사용해야 하는데??
(자꾸 메모리 메모리 하니까 게슈탈트 붕괴옴..)프로그램을 실행하면 그것을 실행하는데 필요한 메모리의 공간을 운영체제로부터 할당 받아서 사용합니다.
그 할당 된 공간에 변수나 문자열 등 데이터를 넣었다 빼었다 하며 사용합니다.
이 때, 개발자가 원하는 시점에서 메모리를 할당하고 원하는 시점에 소멸시킬 수 있는 방법 -> 동적 할당입니다.
너무 어렵다, 직관적으로 이해해보자.
*동적 메모리 할당이 필요한 이유
30명의 나이 데이터를 처리하려면
int age[30];
와 같이 배열 선언을 하여 정적으로 메모리 할당을 할 수 있습니다.
그러나, 몇 명의 데이터가 들어올 지 모르는 경우에는...? 예측이 불가한 상황...
이 때 필요한 것이 동적 메모리 할당!!!!
3. 어떻게 쓰는건데?
// int의 크기인 4바이트만큼 동적 메모리 할당
numPtr = malloc(sizeof(int));
// numPtr 값 출력 -> 메모리 주소가 출력됨
printf("%p\n", numPtr);
%p는 포인터 출력, \n 줄 띄우기
malloc 함수는 heap부분의 메모리를 사용합니다.
*스택과 힙의 차이점 : 메모리 해제
malloc을 사용하여 힙에서 할당한 메모리는 반드시 해제를 해주어야 합니다.
// 메모리 해제
free(numPtr);
왜 메모리 할당을 해주어야 하는가??
실무에서는 메모리를 자주 많이 할당하므로 해제를 해주지 않으면 시스템의 메모리 부족으로 강제 종료나 메모리 할당 실패 등의 이슈가 발생합니다.
memory leak: 메모리 사용량이 계속 증가하는 현상
공부하면서 계속 추가 예정입니다.
출처
malloc - C++ Reference (cplusplus.com)
malloc - C++ Reference
123456789101112131415161718192021222324 /* malloc example: random string generator*/ #include /* printf, scanf, NULL */ #include /* malloc, free, rand */ int main () { int i,n; char * buffer; printf ("How long do you want the string? "); scanf ("%d", &i);
www.cplusplus.com
C 언어 코딩 도장: 35.1 메모리 할당하기 (dojang.io)
C 언어 코딩 도장: 35.1 메모리 할당하기
메모리를 사용하려면 malloc 함수로 사용할 메모리 공간을 확보해야 합니다(memory allocation). 이때 필요한 메모리 크기는 바이트 단위로 지정합니다(메모리 할당, 해제 함수는 stdlib.h 헤더 파일에 선
dojang.io
프로그램 메모리 구조와 동적 할당 : 네이버 블로그 (naver.com)
프로그램 메모리 구조와 동적 할당
어떤 프로그램을 실행하게 되면 그걸 실행하는데 필요한 메모리의 공간을 OS로부터 할당 받아서 사용하게...
blog.naver.com
동적 메모리 할당(Dynamic memory allocation)이 왜 필요할까요? (thebaleun.com)
'Programming > 코딩공부' 카테고리의 다른 글
사용자 함수에 포인터 사용하기 (+call by adress) (0) 2022.06.16 [git] git status 했는데 fatal: not a git repository: (path)에러 해결 (0) 2022.06.10 개발자 동기부여 (0) 2022.04.20 C++ binary 파일 read, write (이미지를 바이너리로 만들 때) (0) 2022.04.19 프로그래밍 초보에게 추천하는 유튜버::노마드 코더 (0) 2022.04.15