inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 시작하는 C 프로그래밍

메모리 동적 할당 및 해제

메모리 할당 해제 방법에 대한 질문

해결된 질문

539

조현준

작성한 질문수 3

1

안녕하세요 수업 잘 듣고 있습니다.

malloc함수로 운영체제한테 메모리 공간을 받아온다고 배웠습니다. 이 때는 내가 사용할 메모리 크기을 명시하는데

free로 메모리를 해제할 땐 내가 받아온 메모리 크기를 명시하지 않는데 어떻게 컴퓨터는 할당해준 메모리를 정확하게 해제해줄 수 있나요?

따로 어디에 할당해준 메모리 크기를 저장해두는 건가요?

c 컴퓨터-구조 assembly-language vc++

답변 1

1

널널한 개발자

우선 매우 좋은 질문이라는 점을 말씀드리고 싶습니다. 바람직한 의문입니다.

malloc()으로 메모리를 할당 받을 때 가령 10바이트를 요구했다면 실제로 할당되는 메모리 크기는 그 이상입니다. OS가 관리하는 과정에서 일정 단위로 메모리를 자르는데 이 때, 일정 수준 낭비가 되더라도 그냥 한 덩어리를 할당합니다. 이는 마치 식당에 가서 4인석 테이블에 한 사람이 앉는 것이 4인 테이블을 1인석으로 개조하거나 교체하는 것보다 효율적인 것과 같습니다.

그리고 OS가 '관리'한다는 것은 워터파크 관리자와 비슷한 행동같은 것입니다. 입장하는 고객에게 락커를 배정하고 키를 줍니다. 사용이 끝나 퇴장 시 키를 회수하지만 입장 고객 누가 몇 번을 배정 받았는지 기록하고 있습니다. 즉, 생각하는 것처럼 할당해준 메모리에 대한 크기는 물론 위치정보까지 모두 저장하고 있기 때문입니다.

이와 관련해 더 깊은 내용을 이해하려면 반드시 '가상 메모리'에 대해 알아야 합니다. 그리고 가상 메모리는 운영체제론에서 배울 수 있습니다. C개발자로 혹은 관련 전문가로의 성장을 희망한다면 반드시 운영체제에 대해 공부하실 것을 권합니다.

참고하시기 바랍니다. 😄

1

조현준

답변주셔서 감사합니다.
운영체제에 공부도 필요해 보이네요!

scanf("%d\n") 의미

0

20

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

Virtual Memory, Memory, Memory mapping tables

0

51

1

샘플코드 출력 오류 발생 질문드립니다

0

63

2

값의 교환에 사용되는 변수의 위치.

0

88

2

메모리 비교에 관한 질문

0

81

2

문자열 Null

0

63

1

C, C++

0

88

2

문자열 입출력 코드 에러

0

60

2

선생님! 120화 2분 50초 질문입니다.

0

67

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

64

2

단축키 맞는지 여부 문의드립니다.

0

60

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

66

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

78

2

용어 설명 필요

0

57

2

stdin, stdout

0

71

2

필수 실습 (최댓값을 반환하는 함수)

0

93

2

아......ㅠㅠ

0

100

2

버퍼 내 엔터

0

72

1

2진수 뺄셈에서 carry-out

0

112

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

80

2

필수실습문제 공부법 (진도 vs 복습)

0

104

2

예제파일 다운로드

0

79

2

Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?

0

120

3