c언어 - memory 메모리

메모리는 malloc -> 사용 -> free 패턴으로 사용됨.

메모리 할당(malloc : memory allocation)
해더파일 : stdlib.h

포인터 = malloc(크기);
성공하면 메모리 주소를 반환, 실패하면 null 반환

메모리 해제(free) - 반드시 해줘야됨.
free(포인터);

1
2
3
4
5
6
7
8
9
int *numPtr;    // int형 포인터 선언
 
numPtr = malloc(sizeof(int));    // int의 크기 4바이트만큼 동적 메모리 할당
 
*numPtr = 10;   // 포인터를 역참조한 뒤 값 할당
 
printf("%d\n"*numPtr);    // 10: 포인터를 역참조하여 메모리에 저장된 값 출력
 
free(numPtr);    // 동적 메모리 해제
cs

memset : memory set - 메모리를 설정하는 함수
해더파일 : string.h

memset(포인터, 설정할 값, 크기)
값 설정이 끝난 포인터를 반환

배열이나 구조체 등의 메모리의 모든 내용을 초기화(0) 설정 할 때 많이 사용.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <string.h>
#include <stdio.h>
 
int main(void)
{
    int arr[10];
    int i;
 
    for(i=0;i<10;i++)
    {
        printf("%d ",arr[i]);//쓰레기 값 출력
    }
    printf("\n");
 
    memset(arr,0,sizeof(arr));//arr의 메모리를 0으로 설정
 
    for(i=0;i<10;i++)
    {
        printf("%d ",arr[i]); // 0 
    }
    printf("\n");   
 
    return 0;
}
cs


※ 변수는 stack에 생성, mallock 함수는 heap의 메모리 사용

출처 : c언어 코딩도장

댓글