C언어에서 free() 함수

조회수 1662회

C언어에서 메모리를 동적할당을 할 때, malloc()와 free()를 사용 합니다.

한가지 의문점인 것이, malloc을 사용하여 동적 할당한 메모리 사이즈를 free함수가 어떻게 알고 동적할당을 푸느냐는 것입니다.

#include <stdlib.h>
#include <iostream>
int main(){
    using namespace std;

    void* p;
    p = malloc(16);
    cout << p << "\n";
    cout << p+16 << "\n"

    free(p);
    cout << p << "\n";
    cout << p+16 << "\n"

}

동적할당된 메모리의 크기가 어디엔가라도 저장되는 건가요?

애초에 어떻게 동적할당된 메모리를 보호하고, 보호된 메모리를 어떻게 free함수가 보호를 해제 하는건가요?

알려 주시면 감사하겠습니다.

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    malloc(16) 으로 메모리 할당을 하면 사용자에게 16바이트의 공간을 할당해 줍니다. 이 16바이트는 사용자가 사용할 수 있는 가상메모리의 공간을 의미합니다 실제 운영체제가 관리하는 메모리상에는 이 메모리 공간의 관리를 위한 추가적인 공간이 더 붙습니다. free 함수는 이 관리메모리 부분에 저장된 정보를 읽고 메모리를 free 시킬수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)