Microsoft PowerPoint - 06-Pointer and Memory.pptx

Similar documents
Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Microsoft PowerPoint - 04-Lines.pptx

Microsoft PowerPoint - 03-Points.pptx

Microsoft PowerPoint - 12-Custom Classes.pptx

슬라이드 1

11장 포인터

PowerPoint 프레젠테이션

Microsoft PowerPoint - 07-Data Manipulation.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - 06-Body Data Class.pptx

11장 포인터

K&R2 Reference Manual 번역본

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2


<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - ch07 - 포인터 pm0415

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

untitled

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

chap 5: Trees

Microsoft PowerPoint - chap06-2pointer.ppt

금오공대 컴퓨터공학전공 강의자료

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - chap11-포인터의활용.pptx

Chapter #01 Subject

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

설계란 무엇인가?

Microsoft PowerPoint - Chapter_09.pptx

C 프로그래밊 개요

chap10.PDF

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - 02-Class Review.pptx

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint 프레젠테이션

슬라이드 1

Chapter 4. LISTS

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

C# Programming Guide - Types

Microsoft PowerPoint - 제11장 포인터(강의)

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

02장.배열과 클래스

Microsoft PowerPoint - chap12-고급기능.pptx

OCW_C언어 기초

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - chap-11.pptx


설계란 무엇인가?

Lab 3. 실습문제 (Single linked list)_해답.hwp

chap x: G입력

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - chap06-1Array.ppt

중간고사

chap8.PDF

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

강의10

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

C 프로그래밊 개요

BMP 파일 처리

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

PowerPoint Template

Slide 1

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

컴파일러

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

PowerPoint 프레젠테이션

PowerPoint Template

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

쉽게 풀어쓴 C 프로그래밍

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Infinity(∞) Strategy

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - a10.ppt [호환 모드]

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Transcription:

Development of Fashion CAD System 6. Pointer and Memory Sungmin Kim SEOUL NATIONAL UNIVERSITY Pointer and Memory Topics 포인터 변수와 포인터의 의미 Pass-by-Value 와 Pass-by-Reference 메모리 포인터와 배열 고정된 크기의 배열 정의 크기가 변하는 배열 정의 다차원 배열 정의 2

Pointer C 언어에서의변수 변수의정의 프로그래밍언어의기초가되는개념 어떤값을대입할수있는대상 변수의종류 기본형 정수형 short, unsigned short, int, unsigned int, long, unsigned long 실수형 float, double, long lobule 문자형 char, unsigned char 무 형 void 구조형 배열 [ ] 구조체 struct 공용체 union 3 Pointer C 언어에서의포인터 포인터의정의 Memory 변수가저장되어있는메모리의주소 (address) 메모리의주소도변수 16비트, 32비트, 64비트 CPU 의의미 중요성 동적 (dynamic) 메모리할당 대량의데이터에대한빠른참조 (reference) 가가능 향상된자료구조의설계 Linked list Binary tree 변수 A 의주소 배열 B 의주소 1234 1 2 3 4 5 4

Pointer C 언어에서의포인터 Pass by Value 함수에어떤인자를넘겨줄때복사본을만들어서넘겨주는방법 함수내부에서인자의값을변경하더라도원본은변하지않는다 대량의데이터를넘겨줘야할경우메모리가낭비된다 Pass by Reference 함수에어떤인자를넘겨줄때인자의포인터를넘겨주는방법 함수내부에서인자의값을변경하면바로원본이변경됨 대량의데이터를주고받기편함 변수를지정할때타입에관계없이일정한메모리만소요됨» 16비트, 32비트, 64비트등주소체계에따름 5 Memory 동적메모리할당 정적메모리할당 (Static Memory Allocation) 지금까지해왔던크기가고정된배열의정의 int x[10],y[10]; : 10개의 integer로된 x, y 배열 float number[100]; : 100개의 float으로된 number 배열 동적메모리할당 (Dynamic Memory Allocation) 배열의크기가정해져있지않은경우 int *x,*y; // 두개의 integer 배열의 pointer float *number; // float 배열의 pointer '*' 연산자는해당변수의 ' 주소 ', 즉 pointer 의미 필요한크기만큼의 memory block 을잡은다음 pointer 에그주소를대입하면됨 사용이끝난메모리는반드시해제해야함 free(x); free(y); 6

Memory 동적메모리할당 Operating System의역할 Memory block 의할당은 O/S 의주요역할중하나 주기억장치 (RAM) 는물론보조기억장치 (HDD, SSD) 에걸쳐안정적인메모리를할당해야함 C 에서의 memory 할당 #include <stdlib.h> calloc ( 최초할당 ), realloc ( 크기조절재할당 ) 함수를사용 int *x=(int*)calloc(10,sizeof(int)); x=(int*)realloc(x,sizeof(int)*100); free(x); C++ 에서의 memory 할당 new 연산자 TPoint *p=new TPoint[100]; delete []p; 7 Memory 동적메모리할당 calloc 함수원형 void* calloc(count, size); 리턴값은물리적주소이며지정하고자하는변수형으로 cast 해줘야함 첫번째인자는할당할배열의크기 두번째인자는배열의한요소의크기» O/S 나 machine에따라 integer 는 4 바이트일수도, 8 바이트일수도있음 realloc 함수원형 void* realloc(void* memory_block, size); 리턴값은물리적주소이며지정하고자하는변수형으로 cast 해줘야함 첫번째인자는크기를조절할대상포인터 두번째인자는조절후의크기 8

Points Point 관련소스수정 TChildForm.h Pointer 는 struct 에도당연히적용가능 int ptpoint PointNum; *Point; TChildForm.cpp 최초에포인터를초기화해야함 PointNum=0; Point=0; OnClose event handler 에서는할당된메모리를해제해야함 void fastcall TChildForm::FormClose(TObject *Sender, TCloseAction &Action) if (Point) free(point); Point=0; Action=caFree; 9 Points Point 관련소스수정 점을추가하는함수가필요 void fastcall TChildForm::AddXY1Click(TObject *Sender) PointXYDialog->ShowModal(); if (PointXYDialog->Result==1) Point[PointNum].x=PointXYDialog->X->Text.ToDouble(); Point[PointNum].y=PointXYDialog->Y->Text.ToDouble(); PointNum++; void fastcall TChildForm::AddXY1Click(TObject *Sender) PointXYDialog->ShowModal(); if (PointXYDialog->Result==1) AddPoint(PointXYDialog->X->Text.ToDouble(), PointXYDialog->Y->Text.ToDouble(); 10

Points Point 관련소스수정 AddPoint 함수정의 void fastcall TChildForm::AddPoint(float x,float y) Point=(ptPoint*)realloc(Point,sizeof(ptPoint)*(PointNum+1)); Point[PointNum].x=x; Point[PointNum].y=y; PointNum++; Move Point 메뉴핸들러수정 void fastcall TChildForm::MovePoint1Click(TObject *Sender) if (Sel[i].Type==0) AddPoint(Point[Sel[i].Num].x+x,Point[Sel[i].Num].y+y); 11 Points Point 관련소스수정 Divide Point 메뉴핸들러수정 void fastcall TChildForm::AddDividePoint1Click(TObject *Sender) if (DividePointDialog->Result) float m=dividepointdialog->m->text.todouble(); float n=dividepointdialog->n->text.todouble(); AddPoint((m*Point[Sel[1].Num].x+n*Point[Sel[0].Num].x)/(m+n), (m*point[sel[1].num].y+n*point[sel[0].num].y)/(m+n)); Mirror Point 메뉴핸들러수정 void fastcall TChildForm::AddMirrorPoints1Click(TObject *Sender) for(i=1;i<selnum;i++) ptpoint p=mirrorpoint(a,b,point[sel[i].num]); AddPoint(p.x,p.y); 12

Lines Line 관련소스수정 배열선언수정및포인터초기화, 메모리해제 int ptline LineNum; *Line; LineNum=0; Line=0; void fastcall TChildForm::FormClose(TObject *Sender, TCloseAction &Action) if (Point) free(point); Point=0; if (Line) free(line); Line=0; Action=caFree; 13 Lines Line 관련소스수정 Polyline 메뉴핸들러수정 AddLine 함수정의 void fastcall TChildForm::Polyline1Click(TObject *Sender) for(i=0;i<selnum-1;i++) AddLine(Sel[i].Num,Sel[i+1].Num); Struct 의여러변수를쉽게초기화 void fastcall TChildForm::AddLine(int p1,int p2) Line=(ptLine*)realloc(Line,sizeof(ptLine)*(LineNum+1)); Line[LineNum].Type=0; // line Line[LineNum].Color=clBlack; Line[LineNum].Thickness=1; Line[LineNum].Style=0; Line[LineNum].PointNum=2; Line[LineNum].Point[0]=p1; Line[LineNum].Point[1]=p2; LineNum++; 14

Lines Line 관련소스수정 Bezier Curve 메뉴핸들러수정 void fastcall TChildForm::BezierCurve1Click(TObject *Sender) AddBezierCurve(Sel); AddBezierCurve 함수정의 Pass-by-Reference 로 ptselection 구조체배열을전달 void fastcall TChildForm::AddBezierCurve(ptSelection *S) Line[LineNum].Type=1; // berizer curve Line[LineNum].Color=clBlack; Line[LineNum].Thickness=1; Line[LineNum].Style=0; Line[LineNum].PointNum=4; int i; for(i=0;i<4;i++) Line[LineNum].Point[i]=S[i].Num; LineNum++; 15 Patterns Pattern 관련소스수정 배열선언수정및포인터초기화, 메모리해제 int ptpattern PatternNum; *Pattern; PatternNum=0; Pattern=0; void fastcall TChildForm::FormClose(TObject *Sender,TCloseAction &Action) if (Point) free(point); Point=0; if (Line) free(line); Line=0; if (Pattern) free(pattern); Pattern=0; Action=caFree; 16

Patterns Pattern 관련소스수정 Define 메뉴핸들러수정 void fastcall TChildForm::Define1Click(TObject *Sender) if (!SelNum) return; int i; AddPattern("Pattern-"+AnsiString(PatternNum+1)); 17 Patterns Pattern 관련소스수정 AddPattern 함수의정의 void fastcall TChildForm::AddPattern(AnsiString N) Pattern=(ptPattern*)realloc(Pattern,sizeof(ptPattern)*(PatternNum+1)); for(i=0;i<selnum;i++) if (Sel[i].Type==1) Pattern[PatternNum].Line[Pattern[PatternNum].LineNum++]=Sel[i].Num; for(j=0;j<line[sel[i].num].pointnum;j++) AddPatternPoint(PatternNum,Line[Sel[i].Num].Point[j]); Pattern[PatternNum].Center=FindPatternCenter(PatternNum); PatternNum++; Line 의갯수도바꿀수있어야한다 결국전부 pointer 로바꿔야함 18

Patterns Pattern 관련소스수정 FindPatternCenter 함수의수정 Pattern 의포인터를전달 Return 값이불필요해짐 void fastcall TChildForm::AddPattern(AnsiString N) FindPatternCenter(Pattern[PatternNum]); PatternNum++; void fastcall TChildForm::FindPatternCenter(ptPattern &P) int i,j; P.mx=P.my=10000; P.Mx=P.My=-10000; float x,y; for(i=0;i<p.pointnum;i++) x=point[p.point[i]].x; y=point[p.point[i]].y; if (x<p.mx) P.mx=x; if (x>p.mx) P.Mx=x; if (y<p.my) P.my=y; if (y>p.my) P.My=y; P.Center.x=(P.mx+P.Mx)/2; P.Center.y=(P.my+P.My)/2; 19 Selections Selection 관련소스수정 배열선언수정및포인터초기화, 메모리해제 int ptselection SelNum; *Sel SelNum=0; Sel=0; void fastcall TChildForm::FormClose(TObject *Sender,TCloseAction &Action) if (Point) free(point); Point=0; if (Line) free(line); Line=0; if (Pattern) free(pattern); Pattern=0; if (Sel) free(sel); Sel=0; Action=caFree; 20

Selections Selection 관련소스수정 MouseDown 이벤트핸들러수정 void fastcall TChildForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (!DragStart) if (Shift.Contains(ssCtrl)) int o=findobject(x,y); if (!Shift.Contains(ssShift)) SelNum=0; if (Sel) free(sel); Sel=0; if (o!=-1) AddSelection(ObjectType,o); else DragStart=true; if (Button==mbRight) Zooming=true; else Zooming=false; Start.x=(float)X; Start.y=(float)Y; void fastcall TChildForm::AddSelection(int type,int object) Sel=(ptSelection*)realloc(Sel,sizeof(ptSelection)*(SelNum+1)); Sel[SelNum].Type=type; Sel[SelNum].Num=object; SelNum++; 21 Problems Conventional Programming 의문제점 메모리할당의문제 동적할당된구조체내부에서또다시동적할당을하려면? 코드가독성의문제 이렇게복잡한코드가과연합리적인가? 코드중복의문제 같은코드가계속나와도되는건가? 코드재사용의문제 비슷한코드를다른프로그램에서쓸수있을까? UI 와데이터의분리문제 다른 UI 를쓰는프로그램으로바꿀수있을까? 디버깅의문제 수많은전역변수로엮인프로그램을과연디버깅할수있을까? 22