상세 컨텐츠

본문 제목

C언어 강좌(공부) #16~17장

카테고리 없음

by 바래다주기 2024. 5. 7. 03:40

본문

16장 메모리 할당

프로그램과 프로세스

프로그램 : 플그래머가 만든 프로그램 파일
프로세스 : 1. CPU가 실행 파일에 있는 명령들을 실행할 수 있도록 운영체제가 실행 파일의 명령들을 읽어서

                      메모리에 재구성한 것
                  2. 실행 중인 프로그램 이라고도 함
                  3. 세그먼트의 집합으로 구성

 

세그 먼트 : 1. 여러 거지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간
                   2. 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트

 

정적 메모리 할당 : 1. 컴파일러가 소스 코드를 기계어로 번역하는 시점에 변수에 크기에 맞게 메모리를 할당하는 것

                              2. 프로그램이 실행될 때 메모리의 위치가 결정됨
                              3. 프로그래 실행 중에 할당된 메모리의 크기는 변경이 불가

 

전역 변수 : 1. 프로그램이 시작해서 종료할 때까지 종료할 때까지 유지
                  2. 프로그램 실행 중에 전역 변수를 추가 혹은 삭제 불가
                  3. 프로세스의 데이터 세그먼트에 저장됨

 

지역 변수 : 1. 함수가 호출될 때 메모리에 할당되었다가 함수가 끝나면 사라짐
                  2. 프로세스의 스택 세그먼트에 저장됨

 

스택 : 1. 스택은 자료 구조의 한 종류
          2. 두개의 포인터로 많은 양을 데이터를 효과적으로 관리하는 이론
          3. 베이스 포인터를 기준으로 데이터를 추가할 때마다 순서대로 데이터를 쌓아 올림
          4. 스택 포인터로 새로운 데이터가 추가될 위치를 가리킴

지역 변수와 스택

스택 프레임 : 1. 함수를 호출할 때 일어나는 스택의 변화
                      2. 스택 프레임은 컴파일러가 C 언어 코드를 기계어로 번역하는 시점에 결정됨
                      3. 지역 변수를 추가 및 삭제하거나 배열 크기를 변경하려면 스택 프레임이 수정
                          되어야 하기 때문에 C 언어 코드를 다시 컴파일 해야 함

동적 메모리 할당 및 해제

동적 메모리할당 : 1. 원하는 시점에 원하는 크기만큼 힙(Heap)에 메모리 할당 가능
                             2. 메모리 사용이 끝나면 언제든지 할당한 메모리 해제 가능
                             3. Giga byte 단위까지 할당 가능

 

malloc 함수로 동적 메모리 할당하기

  1. C표준 함수인 malloc 함수를 사용해서 메모리 할당 가능
  2. void*형식으로 주소를 반환
  3. 할당된 메모리 주소를 받는 시점에 미리 형 변환(Casting)하여 사용

free 함수로 할당된 메모리 해제하기

  1. 힙(Heap)에 할당된 메모리는 프로그램이 끝날 때까지 자동 해제되지 않음
  2. free 함수를 이용하여 명시적으로 메모리 해제
  3. malloc, free 함수가 선언된 malloc.h 파일을 포함해야 함
    free(p); p가 가지고 있는 주소에 할당된 메모리를 해제
    malloc, free 함수를 사용할려면 malloc.h를 선언해야함

할당되지 않은 메모리를 해제하는 경우

  1. 할당되지 않은 메모리를 해제하면 실행 시 오류 발생

정적으로 할당된 메모리를 해제하는 경우

  1. 동적 할당된 주소를 두번 해제하면 프로그램 실행 시 오류 발생

동적 메모리 할당의 장단점

장점 : 1. 스택에 비해 큰 크기의 메모리 할당 가능
          2. 메모리를 할당하고 해제하는 시점을 지정 가능
          3. 할당되는 메모리의 크기를 프로그램 실행 중에 변경 가능

 

단점 : 1. 코드가 복잡해짐
          2. 작은 메모리를 사용할 때에는 비효율적

17장 다차원 포인터

다차원 포인터

  1. 간접으로 여러 번 대상을 가리키는 포인터
  2. 차원은 '자신이 가리키는 대상'의 개수만큼 증가

다차원 포인터 정의하기

  1. 포인터 변수 선언 시 * 키워드를 추가할 때마다 차원이 하나씩 증가
    • 키워드를 두 개 이상 사용한 포인터가 '다차원 포인터'
    • 키워드는 최대 7개 사용 가능
  2. 포인터 변수 선언 시 사용한 * 키워드 개수만큼 포인터를 사용할 때 * 연산자를 사용 가능

2차원 포인터의 구성

  1. 2차원 포인터는 1차원 포인터의 주소 값을 저장한다

2차원 배열과 동적 메모리 할당