메모리 할당

Park Sejin·2021년 8월 2일
0
post-thumbnail

ISO C 표준에 명시된 메모리 할당 함수들

  • malloc
    • 메모리에서 지정된 개수의 바이트들을 할당하는 함수.
    • 할당된 메모리의 초기값은 불확정.
  • calloc
    • 지정된 개수의 바이트들을 할당하되 그 바이트들을 모두 0으로 초기화하는 함수.
  • realloc
    • 이미 할당된 영역의 크기를 늘리거나 줄이는 함수.
    • 크기를 늘리는 경우 기존의 할당된 영역 뒤에 충분한 공간이 없다면 할당이 가능한 새로운 공간으로 이동하여 할당할 수 있다.
    • 크기를 늘리는 경우 기존 내용과 새 영역이 끝 사이의 공간의 초기값은 불확정이다.
#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
                                // 반환값: 성공 시 NULL이 아닌 포인터, 오류 시 NULL
void free(void *ptr);

alloc 함수의 형변환

  • malloc, calloc, realloc 함수들의 반환값인 void*은 다른 포인터 변수에 대입할 경우 명시적인 형변환을 할 필요가 없다고 UNIX 고급프로그래밍에서는 이야기한다.
  • 사람들마다 여러 의견이 있지만 나는 메모리를 동적할당하고 대입할 때 명시적 형변환을 하는 것이 더 좋다고 생각한다.
  • 포인터에 할당한 값을 대입할 때 명시적으로 형변환을 해주지 않으면 의도치 않는 변수에 값을 대입할 수 있다.

C++ 에서는 malloc으로 메모리 동적할당 시 명시적 형변환을 하지 않으면 에러가 발생한다.
https://eli.thegreenplace.net/2009/11/16/void-and-casts-in-c-and-c

출처

UNIX 고급 프로그래밍 7장 - 리처드 스티븐스, 스티븐 레이고
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=97911854750

0개의 댓글