공학기초설계 Youn-Hee Han http://icl.kut.ac.kr 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han http://icl.kut.ac.kr.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

컴퓨터프로그래밍 I 강원대학교 컴퓨터학부 2012 년 1 학기 담당교수 : 정충교 1. 강사진 강사 : 정충교 교수 연구실 : 공 호 조교 : 3 분반 이남세 연구실 : 공
제 2 장 프로그램 개발과정. 통합 개발 환경  통합 개발 환경 (IDE: integrated development environment)  에디터 + 컴파일러 + 디버거.
C 언어 Sun Moon University 1 of 25 C 언어 : 강의소개 강의실 : 산 211 담당교수 : 고경철 ( 정보통신공학과 ) 사무실 : 산학협력관 105B 면담시간 : 수업후 1 시간
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
Basic of Buffer Over Flow
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Activation Records & Recursion
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
C 프로그래밍.
제4장 Cross Compiler 설치.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
Department of Computer Engineering
1 유닉스 시스템 프로그래밍 개요.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
제 1 장 C 언어의 개요 Google 공동 창업자, 래리 페이지와 세르게이 브린.
10장 메모리 관리.
Department of Computer Engineering
[INA240] Data Structures and Practice
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
Computer Architecture
누구나 즐기는 C언어 콘서트 제2장 기초 사항.
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
Term Project Team Member
Beginning Linux Programming
1장. 프로그래밍 언어, C 프로그래밍.
UniSQL/X 실습과제 (1) ■ 실습 기간: ~
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
제 3 장 상수와 변수
임베디드 소프트웨어 설계.
1주차: 프로그래밍언어란 무엇인가? C 언어란? C 프로그래밍을 위한 준비
Linux/UNIX Programming
adopted from KNK C Programming : A Modern Approach
Chapter 2 Lexical Elements, Operators, and the C System
Chapter 10 함수 기본.
CGI (Common Gateway Interface)
[INA240] Data Structures and Practice
운영체제 (Operating Systems) (Memory Management Strategies)
Introduction to Programming Language
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
[INA470] Java Programming Youn-Hee Han
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Lecture Notes on Computer Networks 주 홍 택 컴퓨터공학과 계명대학교
Department of Computer Engineering
Chapter 4 변수 및 바인딩.
복습(1) 문제 문제해결절차(알고리즘) C프로그램 scanf(“%d”, &kuk) ; scanf(“%d”, &eng) ;
-Part2- 제1장 1차원 배열이란 무엇인가.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
Department of Computer Engineering
쉽게 풀어쓴 C언어 Express 제2장 프로그램 개발 과정 C Express.
Signature, Strong Typing
Signature, Strong Typing
C언어 개론.
Signature, Strong Typing
뇌를 자극하는 C 프로그래밍.
GDB - GNU Debugger 김진용.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Windows System Programming
argc, argv 의 사용방법 #include <stdio.h>
C.
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
배열, 포인터, 함수 Review & 과제 1, 2.
Presentation transcript:

공학기초설계 Youn-Hee Han http://icl.kut.ac.kr 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han http://icl.kut.ac.kr

강의 소개 강의 목적 강의 방법 C언어로 문제 해결 훈련 C프로그래밍 실력 향상 수업시간에 주어지는 2개의 문제를 C언어로 개별적으로 풀어보고 Solution을 설명한다. 각 문제별 시간할당 개별 해결 시간: 1시간 Solution 풀이: 30분

강의 소개 평가 방법 Homework로 제출되는 내용에 대하여 다음을 평가 기말고사: 실기 시험 평가방법: 절대평가 제출유무 제출: 10점, 미제출: 0점 완성도 완벽완성: 10점, 부분완성: 5점, 해결을 거의 못함: 1점 제출시간 기한 2일전: 10점 기한 1일전: 9점 기한: 8점 기한초과: 3점 실행 코드 (exe) & 메모리 사이즈 (상대평가) 상위 20%: 10점 중간 60%: 8점 하위 20%: 6점 기말고사: 실기 시험 평가방법: 절대평가 출석: 10%, Homework: 50%, 기말 고사: 40%

MinGW MinGW (Minimalist GNU for Windows) http://www.mingw.org/ A collection of freely available and freely distributable Windows specific header files and import libraries, augmenting the GNU Compiler Collection, (GCC), and its associated tools, (GNU binutils). MinGW provides a complete Open Source programming tool set which is suitable for the development of native Windows programs that do not depend on any 3rd-party C runtime DLLs. 기본 설치면 C언어를 위한 gcc가 설치 됨 다음과 같은 추가 옵션 선택 가능 gcc-g++ for C++ gcc-objc for Objective C gcc-g77 for Fortran 77 gcc-java for Java gcc-ada for Ada mingw-gdb for debugger mingw32-make for make mingw-utils for MinGW Utilities c:\MinWG 폴더를 path 환경변수에 할당

gcc gcc ‘GNU C++ Compiler’의 약자로 C나 C++(이하 C)로 만든 소스파일을 Compile 및 linking 하여 목적, 실행 파일을 만드는 프로그램 gcc 특성 gcc는 Windows OS에서 많이 활용하는 Visual C/C++과 같은 Visual 환경을 제공하지 않음 gcc 는 수동적인 방식임 상용 유닉스에 달려오는 AT&T 스타일, BSD 스타일의 C 언어 문법은 물론 ANSI C 를 기본으로 하여 모든 문법을 소화해낼 수 있음 특유의 문법도 가지고 있으며. 구식 컴파일러, 구식 문법도 지원하고 있음 상용 유닉스에는 cc 가 지원되지만 gcc 를 설치하여 사용하는 경우가 많음

gcc 사용 적절한 Editor로 C 프로그램 작성 파일명: test.c int a,b,c; int main() { scanf("%d %d %d", &a, &b, &c); printf("%d", a+b+c); exit(0); }

*.c(소스파일) -------> *.o(목적파일) *.o(목적파일) -------> a.out(실행파일) gcc 사용 예 MinGW에서 제공하는 gcc 사용 예 gcc test.c a.exe gcc –o 1.exe test.c 1.exe gcc –c test.c test.o gcc –o 2.exe test.o 2.exe 컴파일 *.c(소스파일) -------> *.o(목적파일) 링크 *.o(목적파일) -------> a.out(실행파일)

Program, Process, Memory process is a running program Process & Memory Without memory for storing data, it's impossible for a program to get any work done. Process leads to the use of dynamically allocated memory -- memory allocated at runtime instead of at compile time. A process has five conceptually different areas of memory allocated to it: Code (Text) Initialized Data Zero(Default)-initialized Data Heap Stack

Program, Process, Memory Memory and “size” program text data bss total (dec & hex) BSS is an acronym for "Block Started by Symbol," a mnemonic from the IBM 7094 assembler

Program, Process, Memory Five Memory Blocks Code (Text) The area where the executable instructions reside. Initialized Data The area where statically allocated and global data that are initialized to non-default values Zero(Default)-initialized Data The area where statically allocated and global data that are initialized to zero by default Heap The area where dynamic memory (obtained by malloc() and friends) resides Stack The area where local variables are allocated. Local variables are all variables declared inside the opening left brace of a function body (or other left brace) that aren't defined as static. function parameters are also placed on the stack

Program, Process, Memory gcc, size, strip The strip program removes the symbols from the object file. This can save significant disk space for a large program, at the cost of making it impossible to debug Even after removing the symbols, the program file size is invariable $ gcc -o ch03-memaddr ch03-memaddr.c Compile the program $ ls -l ch03-memaddr Show program size -rwxr-xr-x 1 arnold devel 12320 Nov 24 16:45 ch03-memaddr $ size ch03-memaddr Show memory sizes text data bss dec hex filename 1458 276 8 1742 6ce ch03-memaddr $ strip ch03-memaddr Remove symbols $ ls -l ch03-memaddr Show program size again -rwxr-xr-x 1 arnold devel 3480 Nov 24 16:45 ch03-memaddr $ size ch03-memaddr Component sizes haven't changed text data bss dec hex filename

Appendix

1. 프로세스의 메모리 배치 프로세스 이미지 C 프로그램과 이미지의 내용 프로세스는 일정한 메모리를 배정 받아 사용 프로그램 실행에 필요한 어셈블러 코드, 변수가 저장 원칙적으로 한 프로세스는 다른 프로세스의 메모리 영역에 접근 불가 C 프로그램과 이미지의 내용 #include <stdio.h> #include <stdlib.h> extern char **environ; //extern 변수 int init_global_var = 3; //초기화된 global 변수 int unint_global_var; //초기화되지 않은 global 변수 int main(int argc, char **argv) { int auto_var; //automatic 변수 (local variable) static int static_var; //static 변수 register int reg_var; //register 변수 char *auto_ptr; //automatic 변수 (local variable) auto_ptr = malloc(10); return 0; }

unint_global_var, static_var 1. 프로세스의 메모리 배치 프로세스의 메모리 영역과 저장되는 변수 종류 메모리 영역 변수 환경변수 영역 environ 코드 영역 어셈블된 프로그램 코드 데이터 영역 (global, static) 초기화된 영역 init_global_var = 3 초기화 안된 영역 (0으로 할당) unint_global_var, static_var 스택 argc, argv, auto_var, reg_var, auto_ptr 힙 malloc()이 할당한 10바이트 하위 메모리 상위 메모리

1. 프로세스의 메모리 배치 #include <stdio.h> void test(void) { static int s_count=0; int a_count=0; s_count++; a_count++; printf("static count=%d\tauto count=%d\n", s_count, a_count); } void main(void) { int i; for(i=0; i<5; i++) test();

2. 스택과 힙 스택 (Stack) 힙 (Heap) 현재 호출되어 실행중인 함수의 코드와 환경 정보를 저장 예) main()에서 printf()를 호출하였다면 main()이 차지하는 영역 위에 printf()를 처리하기 위한 메모리가 할당되고 printf()가 수행 print()가 리턴되면 printf()와 관련된 영역은 삭제되고 프로세서의 수행은 main()으로 돌아감 함수 내부에서 임시로 사용되는 automatic 변수는 스택 영역에 할당 automatic 변수 – 자동으로 생성되었다가 자동으로 없어지는 변수 힙 (Heap) 스택은 영역 사용하던 메모리가 함수의 종료와 함께 사라짐 이 문제를 해결하기 위하여 리턴되어도 사라지지 않도록 한 영역이 힙 malloc() 함수를 사용한 역영은 힙에 저장

2. 스택과 힙 int main() { int main() { char *prt; char *prt; ptr = func(); } char *func() { char arr[10]; return arr; int main() { char *prt; ptr = func(); // ptr 사용 free(ptr); // ptr 사용 종료 } char *func() { char *arr; arr = malloc(10); return arr;

3. 활성화 레코드 (Activation Record) 메인함수 호출에 따른 활성화 레코드 int a;                  전역 변수 void main( ) { int b; char *s;       지역변수(스택) s = malloc(10);      10 바이트짜리 동적변수(힙) b = fcn(5); free (s); } 힙 *s 미사용 공간   스택 (main 함수의 활성화 레코드) Local Variables b, s Return Address 204번지 Value Parameters Return Value 전역변수 a 기계코드 main( ), fcn( )

4. 활성화 레코드 (Activation Record) 일반 함수 호출에 따른 활성화 레코드 int fcn(int p)  {  파라미터(스택) int b = 2;     b = b + p; return (b); } 힙 *s 미사용 공간   스택 (fcn 함수의 활성화 레코드) Local Variables b Return (귀환) Address 230번지 Value Parameters p: 5 Return Value 7 (main 함수의 활성화 레코드) b, s Return Address 204번지 전역변수 a 기계코드 main( ) fcn1( )