1 minute read

메모리 관리와 메모리의 동적 할당

  • 메모리의 구성

    코드, 힙, 스택, 데이터로 나뉨

  • 메모리를 영역별로 저장하는 이유

    메모리 공간을 누눠서 유사한 성향의 데이터를 묶어서 저장 시 관리가 용이해지고 메모리 접근 속도 향상됨.

  • 메모리 영역별로 저장되는 데이터 유형

    코드는 프로그램의 코드가 저장되는 메모리 공간이며 CPU 가 저장된 명령문 하나씩 가져가서 실행 데이터는 전역 변수, static 변수가 저장됨 스택은 지역변수, 매개변수가 저장됨 힙은 원하는 시점에 할당되고 소멸하는 데이터가 저장됨

  • 프로그램의 실행에 따른 메모리의 상태 변화

    전체 메모리 공간은 프로그램이 시작될 때 운영체제에 의하여 할당되며 프로그램이 종료될 때 운영체제가 회수해 감. 데이터는 프로그램이 시작하는 순간부터 할당되며 프로그램이 종료될 때 해제됨 스택은 함수가 호출될 때 할당되며 함수가 종료될 때 해제됨 힙은 명령할 때 할당되며 명령할 때 해제됨

  • 스택

    먼저 쌓은 것이 먼저 빠져나감. 함수의 변수 또한 먼저 호출될 수록 나중에 해제됨

  • 전역 변수와 지역 변수로 해결이 되지 않는 상황

    함수에서 return 되는 배열의 경우 메모리 주소를 return 하고 이 메모리 주소에 할당된 메모리는 함수가 종료될 때 이미 소멸되므로 쓸수 없는 값이 됨

  • 힙 영역의 메모리 공간 할당과 해제

    malloc 과 free 로 공간 할당, 해제함 malloc 은 할당 성공 시 메모리 주소 반환

  • malloc 함수의 반환형이 void 형 포인터인 이유와 힙 영역으로 접근

    어떤 형태의 데이터 인지 결정하지 못 하므로. 형 변환 연산자를 사용하여 형 변환 후 접근

  • free 함수 호출하지 않으면?

    프로그램이 종료될 때 알아서 해제됨.

  • calloc 함수

    힙 영역 메모리 할당 시 사용. malloc 은 값 할당 하지 않을 시 쓰레기값으로 초기화 되지만 calloc 은 값 할당하지 않을 시 할당된 메모리의 모든 비트를 0으로 초기화 시킴

  • 힙 할당 메모리 공간 확장

    realloc 으로 확장 확장할 영역이 넉넉한 경우 메모리 주소 값 같으며 넉넉하지 않은 경우 메모리 새로 할당하기 때문에 메모리 주소 바뀜

Categories:

Updated: