제14장 동적 메모리.

Slides:



Advertisements
Similar presentations
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
Advertisements

C 언어 (STS ) 10. Pointer Applications.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
최윤정 Java 프로그래밍 클래스 상속 최윤정
C 프로그래밍 I.
연결리스트(linked list).
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Chapter 25. 메모리 관리와 메모리의 동적 할당
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Chapter 10 Pointer Applications.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 3장. C보다 나은 C++ II.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
23장. 구조체와 사용자 정의 자료형 2.
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
TCP/IP Socket Programming…
11장. 1차원 배열.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
메모리 관리 & 동적 할당.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
CHAP 21. 전화, SMS, 주소록.
Canary value 스택 가드(Stack Guard).
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
데이터 동적 할당 Collection class.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
Chapter 12 파일 입출력.
Chapter 11 구조체.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
7 생성자 함수.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제14장 동적 메모리

동적 메모리 할당에 대한 개념을 이해하고 응용으로 연결 리스트를 학습합니다. 이번 장에서 학습할 내용 동적 메모리 할당에 대한 개념을 이해하고 응용으로 연결 리스트를 학습합니다. 동적 메모리 할당의 이해 동적 메모리 할당 관련 함수 연결 리스트

동적 할당 메모리의 개념 프로그램이 메모리를 할당받는 방법 정적(static) 동적(dynamic)

정적 메모리 할당 정적 메모리 할당 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것 메모리의 크기는 프로그램이 시작하기 전에 결정 int i, j; int buffer[80]; char name[] = “data structure"; 처음에 결정된 크기보다 더 큰 입력이 들어온다면 처리하지 못함 더 작은 입력이 들어온다면 남은 메모리 공간은 낭비

동적 메모리 할당 동적 메모리 할당 실행 도중에 동적으로 메모리를 할당받는 것 사용이 끝나면 시스템에 메모리를 반납 실행 도중에 동적으로 메모리를 할당받는 것 사용이 끝나면 시스템에 메모리를 반납 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용 malloc() 계열의 라이브러리 함수를 사용

동적 메모리 할당 절차

동적 메모리 할당 예제 100

중간 점검 프로그램의 실행 도중에 메모리를 할당받아서 사용하는 것을 _______________이라고 한다. 동적으로 메모리를 할당받을 때 사용하는 대표적인 함수는 ___________이다. 동적으로 할당된 메모리를 해제하는 함수는 _______이다. 동적 메모리 함수의 원형은 헤더파일 __________에 정의되어 있다. 동적 메모리 할당 malloc() free() stdlib.h

malloc()과 free() malloc()은 바이트 단위로 메모리를 할당 size는 바이트의 수 만약 요청한 메모리 공간을 할당할 수 없는 경우에는 NULL값을 반환 void *malloc(size_t size);

malloc()과 free() free()는 동적으로 할당되었던 메모리 블록을 시스템에 반납 ptr은 malloc()을 이용하여 동적 할당된 메모리를 가리키는 포인터 void free(void *ptr);

예제 #1 *pc = m

예제 #2 abcdefghijklmnopqrstuvwxyz

예제 #3

예제 #4

calloc() calloc()은 0으로 초기화된 메모리 할당 항목 단위로 메모리를 할당 (예) int *p; p = (int *)calloc(5, sizeof(int)); void *calloc(size_t n, size_t size);

realloc() realloc() 함수는 할당하였던 메모리 블록의 크기를 변경 (예) int *p; p = (int *)malloc(5 * sizeof(int))); p = realloc(p, 7 * sizeof(int))); void *realloc(void *memblock, size_t size);

중간 점검 동적 할당 후에 메모리 블록을 초기화하여 넘겨주는 함수는 __________이다. 할당되었던 동적 메모리의 크기를 변경하는 함수는 _____이다. 동적 메모리 할당에서의 단위는 ________이다. malloc()이 반환하는 자료형은 ________이다. calloc() realloc() 바이트 void *

연결 리스트 배열(array) 연결 리스트(linked list) 장점: 구현이 간단하고 빠르다 단점: 크기가 고정된다. 중간에서 삽입, 삭제가 어렵다. 연결 리스트(linked list) 각각의 원소가 포인터를 사용하여 다음 원소의 위치를 가리킨다.

연결 리스트의 장단점 중간에 데이터를 삽입, 삭제하는 경우 데이터를 저장할 공간이 필요할 때마다 동적으로 공간을 만들어서 쉽게 추가 구현이 어렵고 오류가 나기 쉽다. 중간에 있는 데이터를 빠르게 가져올 수 없다.

연결 리스트의 구조 노드(node) = 데이터 필드(data field)+ 링크 필드(link field)

연결 리스트의 구조 헤드 포인터(head pointer): 첫번째 노드를 가리키는 포인터

노드 생성 노드들은 동적으로 생성된다.

자기 참조 구조체 자기 참조 구조체(self-referential structure)는 특별한 구조체로서 구성 멤버 중에 같은 타입의 구조체를 가리키는 포인터가 존재하는 구조체

간단한 연결 리스트 생성

연결 리스트의 응용 소장하고 있는 책의 목록을 관리하는 프로그램을 작성 배열을 사용하여 작성 연결 리스트를 사용하여서 작성

배열을 이용한 프로그램

배열을 이용한 프로그램

실행 결과와 문제점 배열의 크기가 한계가 있으므로 책의 개수가 MAX_BOOKS를 넘어가면 더 이상 저장할 수 없다. 그렇다고 MAX_BOOKS를 1000으로 하는 것은 책을 아주 적게 가지고 있는 사람도 있기 때문에 메모리의 낭비가 될 수 있다.

연결 리스트를 이용한 프로그램

연결 리스트를 이용한 프로그램

연결 리스트를 이용한 프로그램

연결 리스트를 이용한 프로그램

실행 결과

중간 점검 연결 리스트에서 다음 노드는 ________로 가리킨다. 연결 리스트의 일반적인 노드는 _______필드와 ______ 필드로 구성되어 있다. 구조체의 멤버 중에 자기 자신을 가리키는 포인터가 존재하는 구조체를 ______________라고 한다. 배열과 연결 리스트의 가장 큰 차이점은 무엇인가? 포인터 데이터 링크 자기 참조 구조체 배열(array): 크기가 고정되어 있다. 연결 리스트(linked list): 동적으로 크기를 늘릴 수 있다.

Q & A

감사합니다.