본문 바로가기

c언어16

c언어 코드 최적화 5장. 함수 호출 최적화 C언어 최적화에 대해서 벌써 마지막 장이다. (사실은 더 많은 방법이 있지만, 가장 큰 차이가 존재하는 것들을 위주로 다뤄보았다.) 지금까지 C언어 코드 최적화 포스팅을 정독했다면 컴퓨터에대한 원리를 이해했을 것이다. 이번에 다뤄볼 최적화 방법은 함수 호출과 관련이 있다. 함수 호출은 사용자 정의 함수를 main() 이나 다른 함수에서 호출하여 사용하는 것을 말한다. 예를 들면, 아래와 같은 경우가 함수 호출의 예가 되겠다. #include #include #include int sum(int a, int b) { return a + b; } void main() { int a = 5; int b = 7; printf("%d + %d = %d \n ", a, b, sum(a, b)); return; } .. 2020. 10. 15.
c언어 코드 최적화 4장. 조건문 최적화 C언어 최적화에는 여러가지 고려해야 할 것들이 많다. 이번에는 조건문에서의 최적화를 다뤄보도록 하자. 1. 조건문은 비교연산 횟수를 줄여야 한다. 우리가 흔히 사용하는 조건문은 if 조건문이다. 별 생각없이 코딩을 하게되면 아래와 같은 코드가 나오게 된다. if (i == 1) { } else if (i == 2) { } else if (i == 3) { } else if (i == 4) { } else if (i == 5) { } else if (i == 6) { } else if (i == 7) { } else if (i == 8) { } 연산속도가 중요하지 않다면 이렇게 사용해도 큰 문제가 없다. 하지만 연산속도를 중요시 한다면 이런 코딩보다는 다른 방식을 사용해야 한다. 문제를 잘 살펴보면 만약에.. 2020. 10. 14.
c언어 코드 최적화 3장. LOOP 최적화 코드를 짜다보면 반복문은 무조건 사용하게 되어있다. 그런데 이 반복문 연산속도가 빠른놈이 아니다. 1. 반복문은 연산속도가 느리다. 반복을 하게되면 연산속도가 늦다는 것인데, 예를 들면 1부터 n까지의 정수들으 더하는 코드를 작성하면 아래와 같을 것이다. for(int i = 1; i 2020. 10. 14.
C언어 코드 최적화 2장. 비트연산을 사용하자. C언어 코드 최적화 방법은 여러가지가 있다. 이전에 나눗셈을 사용하지 않는것을 다뤄봤었다. 이번에는 비트연산을 사용하는 것이 얼마나 빠르게 코드를 작동시키는지 다뤄보도록 하자. 비트(bit)라는 것은 데이터에서 가장 기본이 되는 값으로, 0과 1로 이루어져 있다. 1 byte 는 8 bit 이다. 우리가 사용하는 int 자료형은 4byte 로 32bit 크기라고 할 수 있겠다. 아무튼 이런 비트연산을 하면 왜 코드 작동 속도가 빨라지는지 이론상 원리로 알아보자. 1. 비트 연산( OR, AND, XOR 등)은 컴퓨터에서 가장 빠르게 실행되는 연산이다. 그러므로 이러한 연산을 사용하면 좋을 수 밖에 없다. 코드에서 예를 들어보면, struct HUMAN { int is_Alive; int is_Walkin.. 2020. 10. 14.
c언어 코드 최적화 1장. 나눗셈을 사용하지 말자. C언어는 오랜 역사를 갖고 있으며, 더 발전한 C++ 언어 역시 많은 곳에서 사용되고 있다. 특히 컴퓨터보다는 제한된 성능의 기계에서 사용하고는 한다. 보통 우리는 임베디드 시스템이라고 부른다. 임베디드 시스템에 적용하는 코드는 최적화가 절대적으로 필요하다. 왜냐하면, 컴퓨터처럼 성능이 좋은 것은 아니지마는 성능을 포기하지 않기 때문이다. 그러기에 코드 최적화를 통해서 코드 실행 시간을 단축할 필요가 있다. 코드 최적화라는 것은 쉽게 생각하면 메모리를 알맞게 사용하는 것이라고 보면 된다. 코드 최적화 방법에는 여러 가지가 있다. 그중에서 가장 기초가 되는 것이 나눗셈을 사용하지 않는 것이다. 인텔 Skylake cpu 를 기준으로 봤을 때, 나눗셈은 10 cycle의 연산이 필요하다면, 덧셈은 1 cyc.. 2020. 10. 9.
C언어 기초 - 쓰레드 이해하고 사용하는 방법 본문 목표 코드를 여러개 동시에 돌리고 싶을 때, 사용하는 것이 쓰레드이다. 쓰레드의 원리를 이해하고, 사용방법을 알아보자. 개념 정리 코드는 하나만 돌아가는 것이 기본이다. 그런데 성능 좋은 컴퓨터에서 여러개를 동시에 처리하지 못하는 것 만큼 제값 못하는건 또 없다. 여러개를 동시에 처리하기 위한 개념이 쓰레드이다. 다시말해서 코드는 하나 실행했는데, 작동되는 기능이 2개 이상 되게 하는 것이 쓰레드이다. 아두이노 같은 임베디드 보드를 사용하면 우리는 loop( ) 또는 while(1) 처럼 무한 반복문 안에다가 코딩을 하고, 계속 반복을 돌리게 한다. 그런데 기능을 두가지를 동시에 하게 하고 싶으면 timer 기능을 사용하게 된다. 예를 들어, 타이머를 시작해두고, 100ms 마다 1번 기능의 whi.. 2020. 7. 9.
C언어 기초 - 헤더파일 만드는 방법과 사용하는 방법 본문 목표 프로젝트가 복잡하고 규모가 클 수록, 코드가 많이 길어지게 된다. 코드가 길어지면 가독성이 떨어지게 된다. 가독성이 떨어지면, 코드 개발이 복잡해지고, 오류가 발생할 확률이 높고, 오류를 잡기 힘들어진다. 따라서 가독성을 높이기 위해서는 여러개의 소스파일을 사용한다. 여러개 소스파일을 만들고, 사용하는 방법을 헤더파일을 통해 알아보자. 개념 정리 학창시절 공부를 한다고 했을 때, 단원별로 공부를 하고, 개념노트를 만들곤 했을 것이다. 프로그래밍도 마찬가지로, 계속 개발할 수록 비슷한 것들 끼리 묶어서 저장하는 것이 좋다. 나중에 찾아보기도 쉽고 이해하기도 쉽기 때문이다. 노트 하나에 수학, 물리, 화학을 한꺼번에 정리하면 완전 뒤죽박죽이 되어서 알 수 없듯이 프로그래밍도 소스파일 하나에 개발을.. 2020. 7. 8.
C언어 기초 - 포인터 와 주소 이해하기, pointer 본문 목표 C언어의 핵심 중 하나가 '포인터' 이다. 포인터를 사용할 줄 알아야 C언어를 통해서 개발을 수월하게 할 수 있다. 단순히 변수를 사용하면 해당 소스 파일에서만 사용이 가능한데, 다른 외부 소스 파일에서 해당 변수 값을 참조할 때 사용하는게 '포인터'이다. 메모리 주소에 대해서 이해하여 포인터가 무엇인지 이해하고 사용하는 방법을 알아보자. 개념 정리 포인터는 영어로 'pointer' 이다. 뜻을 생각해보면, '가르키는 것' 이라고 할 수 있겠다. 실제로 C언어에서의 포인터는 해석 그대로의 개념이다. 가르키는 것인데, 무엇을 가르키냐면 바로 '메모리 주소 값' 이다. 컴퓨터의 RAM 이라는 부분을 메모리라고 하는데, 그 메모리에 우리가 사용하고자 하는 변수들이 저장 되는 것이다. 우리가 char.. 2020. 7. 8.
C언어 기초 - 사용자 정의함수 만들기 본문 목표 저번 포스팅까지 해서 자료형, 조건문, 반복문까지 핵심적인 것들은 다 다뤄보았다. 이번에는 다음으로 중요한 사용자 정의함수를 만드는 것을 이해하고 자신의 함수를 만들어 사용해본다. 개념 정리 사용자 정의 함수는 프로그램에서 제공하는 기본 함수들을 이용하여 새롭게 함수를 만드는 것이다. 원할 때, 호출해서 사용할 수 있으며, 코드를 단순히 할 때 필수적이다. 코드가 단순해야 나중에 문제가 생겨도 쉽게 원인을 파악할 수 있어서 중요하다. 사용자 정의함수 만들기 전에 자료형을 다시 살펴보자. return 0; 을 쓸때는 뭐고 return; 을 쓸때는 뭔지 모른다면 집중하시길! 자료형을 간단히 하자면 void - 없음 char - 작은 정수 또는 문자 short - 크기가 작은 정수 int - 정수 .. 2020. 7. 6.
C언어 기초 - 조건문 if , else if, else 이해하기 본문 목표 조건문은 주어진 조건이 참일 경우 해당 코드를 실행하는 명령이다. 주어진 조건에 따라서 경우의 수를 여러개로 나눌 수 있는데, if, else if, else 가 그렇다. if 를 여러개 사용해도 되지만, 그러면 안 되는 이유는 실행 속도에서 손해를 보기 때문이다. if 는 무조건 조건 검사를 하는데, 이미 해결된 사안이고, 뒤에 있는 거짓이라 필요 없음에도 다 한번씩 두드려보기에 코드 작동 속도에 저하가 생기게 된다. 따라서 올바른 조건문을 사용할 줄 알아야 한다. 개념 정리 if, else if, else 의 사용 방법은 아래와 같다. if ( 조건1 ) { 조건 1이 참이면 실행 } else if ( 조건2 ) { 조건 1이 거짓이고, 조건 2가 참이면 실행 } else if ( 조건3 .. 2020. 7. 5.
C언어 기초 - 조건문 if 이해하기 본문 목표 C 언어를 다루는데에 있어서 중요한것은 3가지라고 할 수 있다. 1. 자료형(변수) 2. 조건문 3. 반복문 자료형은 여태 다뤘으니, 이번에는 조건문을 다루도록 한다. 조건문 중에서 if 함수를 이해하고, 사용법을 익혀보자. 개념 정리 조건문은 말 그대로 조건이 충족하느냐? 못하느냐? 고 묻고, 충족하면 실행하는 명령이다. 조건문을 제대로 쓸 줄 알려면 연산자를 알아야 한다. 연산자 중에서 조건문에만 필요한 연산자를 다뤄보자. 이런 연산이 조건문에 사용된다. 솔직히 기초니깐 마지막 비트 논리 연산자는 굳이 지금 알 필요 없다. 연산자 의 구조를 보면 다음과 같다. (관계, 논리, 조건) 연산자는 1 또는 0의 결과를 내 놓는다. if(조건) 의 경우 조건이 참이면, 해당 조건문을 실행하는 것이.. 2020. 7. 5.
C언어 기초 - 지역변수와 전역변수 이해하기 본문 목표 C언어에서 코딩을 하면 당연히 지역변수와 전역변수를 이해해야한다. 지역변수와 전역변수의 차이를 이해하고, 실제 사용하는 방법을 이해한다. 개념 정리 지역변수와 전역변수를 이해해야 하는데, 그 차이는 이름으로 유추해 볼 수 있다. 지역변수 - local variable : 특정 지역에서만 사용되는 변수 전역변수 - global variable : 모든 구역에서 사용되는 변수 즉, 지역변수는 좁은 범위에서 사용되고, 전역변수는 모든 범위에서 사용하는 것이다. "그냥 모든 변수 다 전역변수로 사용하고 쓰면 편하잖아요!" 라고 할 수 있다. 지역변수가 중요한 이유는 프로그램 실행속도와 연관된다. 모든 변수를 전역변수로해서 사용하게 된다면 프로그램이 시작부터 끝까지 사용하지도 않을 변수들을 다 유지한채.. 2020. 7. 5.
C언어 기초 - 기본 자료형 정리 본문 목표 C언어를 사용하면 변수들을 잘 다뤄야 한다. (어느 언어를 이용하던 마찬가지) 그러려면 자료형을 잘 알고 있어야한다. 처음 C언어를 다루는 단계라면 얕게 배우고 넘어가도 되지만, 이제 코드 실행 시간을 단축시키고, 메모리를 효율적으로 관리하려면 메모리 크기까지 다뤄야 한다. 그리고 수학적으로 이용하는 경우에는 각 자료형의 데이터 범위도 알아야 한다. 오늘은 C언어의 가장 기초가 되는 자료형을 익혀보도록 한다. 개념 정리 C언어의 기본 자료형으로는 정수형과 실수형이 있다. 일단 컴퓨터는 0과 1 로 작동한다. 즉, 2진수로 작동한다. 0 과 1, 두개를 사용할 때, 그 한자리 단위를 우리는 bit 라고 한다. 만약 8 bit 라고 한다면 위와 같이 되는 것이다. 우리가 1000m 를 1km 라고.. 2020. 7. 5.
C언어 기초 - printf 로 숫자 출력하기 본문 목표 어떤 언어로든 코딩을 할 때, 잘 진행되고 있는지 확인이 필요하다. 그런 상황에서 중간에 변수들의 값 또는 진행 상황을 확인하기 위해서 화면에 값을 출력해줄 필요가 있다. 그 때, 사용하는 함수가 C언어에서는 printf( ) 라는 함수이다. printf( ) 함수를 이용해서 변수들의 값을 출력하여야 한다. 이 때, 변수마다 출력하는 방법이 다르므로 사용법을 이해한다. 개념 정리 printf( ) 라는 기본 함수를 이용해서 문장을 출력하는 것을 저번에 다뤄봤었다. 이번에는 변수들을 출력해봐야 하는데, 아직 변수들을 다루지 않았으므로, 출력방식에 대해서만 다뤄보겠다. 1. 정수 - -3, -2, -1, 0, 1, 2, 3 ...... - 정수형을 출력할 때에는 %d 를 사용한다. 2. 실수 - .. 2020. 7. 5.
C언어 기초 - printf 로 문장 출력하기 본문 목표 어떤 언어로든 코딩을 할 때, 잘 진행되고 있는지 확인이 필요하다. 그런 상황에서 중간에 변수들의 값 또는 진행 상황을 확인하기 위해서 화면에 값을 출력해줄 필요가 있다. 그 때, 사용하는 함수가 C언어에서는 printf( ) 라는 함수이다. printf( ) 함수를 이용해서 변수들의 값을 출력하거나, 진행 상황을 확인하기 위해 문자열을 출력하는 것을 할 수 있어야 한다. 개념 정리 printf( ) 는 괄호 안의 값을 출력하는 C언어 기본 함수이다. 괄호 안에 변수를 입력해도 되고, 문자열을 입력해도 된다. 아직 변수를 다루지 않았으므로 문장 출력만 다루고 넘어가도록 한다. printf( "출력하려는 문장" ); 사용 방법은 위와 같이 단순하다. 저렇게 하면 출력하려는 문장이 cmd창에 뜨게.. 2020. 7. 5.