전체 글
[C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역)
프로그램을 수행하기 위해서는 메모리 공간이 운영체제(Operating system)에 의해 코드 영역, 데이터 영역, 힙 영역, 스택 영역 이렇게 4개의 영역으로 구분되어 사용된다. 이렇게 변수의 특성에 따라 4개로 구분된 메모리 공간 안에서 한 영역에 변수가 선언되고, 문자열 등이 선언되어 사용된다. 코드 영역 : 프로그램의 코드가 저장되는 메모리 공간이다. 컴퓨터는 코드 영역에 저장된 명령문을 하나씩 가져가서 실행한다. 데이터 영역 : 데이터 영역에는 전역 변수와 스택 변수가 할당된다. 프로그램의 시작과 동시에 메모리 공간에 할당되어 프로그램이 종료될 때까지 남아 있다. 힙 영역 : 데이터 영역과 스택 영역에 할당되는 변수는 생성과 소멸 시점이 결정되어 있다. 개발자가 원하는 시점에 변수를 할당하고 ..
[C] C언어에서 음수를 표현하는 방법
1. -10은 메모리 비트에 어떻게 저장될까? 먼저, 10진수 10을 저장하려면 2진수 1010으로 변경한 다음 비트에 저장된다고 알고 있다. 그런데 음수는 어떻게 표현해야 할까? 2. 양수와 음수를 구분하기 위한 부호와 절대치 법칙 다른 말로 MSB(Most Significant Bit) 방법이라고도 하는데, 이는 최상위 비트를 사용하여 숫자가 양수인지 음수인지를 구분하는 방법이다. 1 0 0 0 1 0 1 0 최상위비트 MSB가 1이므로 음수 0 0 0 0 1 0 1 0 최상위비트 MSB가 0이므로 양수 비트 연산자 ~는 '1의 보수'이다. 1의 보수는 2진수로 된 숫자의 비트를 모두 반전시키는 것이다. 예를 들어 ~(1010)은 (0101)이 된다. 다시 말해 (1010)의 1의 보수 값은 (010..
컴파일(Compile) 과정
전처리(Precompile) 컴파일의 전체 과정은 네 단계로 나누어볼 수 있습니다. 그 중 첫 번째 단계는 전처리인데, 전처리기에 의해 수행됩니다. # 으로 시작되는 C 소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려줍니다. 예를 들어, #include는 전처리기에게 다른 파일의 내용을 포함시키라고 알려줍니다. 프로그램의 소스 코드에 #include 와 같은 줄을 포함하면, 전처리기는 새로운 파일을 생성하는데 이 파일은 여전히 C 소스 코드 형태이며 stdio.h 파일의 내용이 #include 부분에 포함됩니다. 컴파일(Compile) 전처리기가 전처리한 소스 코드를 생성하고 나면 그 다음 단계는 컴파일입니다. 컴파일러라고 불리는 프로그램은 C 코드를 어셈블리어라는 저..
[자료구조 알고리즘] 순환(재귀)
순환(재귀) 순환이란? 순환이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 예) 팩토리얼 int factorial(int n) { if( n 순환 호출을 하는 부분 } 순환 반복 프로그래밍 언어에서 되풀이하는 방법에는 반복(iteration)과 순환(recursion)의 2가지가 있다. 반복이란 for나 while등의 반복구조로 되풀이 하는 방법이다. 때로는 반복을 사용하게 되면 지나치게 복잡해지는 문제들도 존재한다. 이런 경우에는 순환이 좋은 해결책이 될 수 있다. 순환은 본질적으로 순환적(recursive)인 문제나 그러한 자료구조를 다루는 프로그램에 적합하다. 기본적으로 반복과 순환은 문제 해결 능력이 같으며 많은 경우에 순환 알고리즘을 반복 버전으로, 반복..
자료구조와 알고리즘 (2)
알고리즘의 성능 분석 - 수행시간 측정방법 가장 단순하지만 가장 확실한 방법은 알고리즘을 프로그래밍 언어로 작성하여 실제 컴퓨터상에서 실행시킨 다음, 그 수행시간을 측정하는 것이다. C언어에서 수행시간을 측정하는 방법에는 다음과 같이 2가지의 방법이 있다. [방법 1] #include start = clock(); ... stop = clock(); double duration = (double)(stop - start) / CLOCKS_PER_SEC; clock() 함수는 호출 프로세스에 의하여 사용된 CPU 시간을 계산한다. clock() 함수는 호출되었을 때의 시스템 시각을 CLOCKS_PER_SEC 단위로 반환한다. 따라서 초단위의 시간을 측정하기 위하여 (stop - start)값을 CLOCKS..
[C] 모두의 C언어 복습&정리 (2)
1. 변수의 저장 범위 int는 정수를 저장하는 데 필요한 메모리 공간을 4바이트 사용한다. 컴퓨터는 모든 정보를 0과 1, 즉 2진수로 처리한다. 이때 0 또는 1을 저장할 수 있는 메모리 공간을 비트(bit)라고 한다. 비트는 컴퓨터가 정보를 저장하는 최소 공간으로, 8개의 비트가 모인 공간을 바이트(byte)라고 한다. 그러므로 4바이트는 32비트와 같다. 1비트로 표현 가능한 숫자는 0과 1 두 개 뿐이다. 2비트로 표현 가능한 숫자는 2진수 00, 01, 10, 11, 즉 10진수로 0, 1, 2, 3을 표현하고 저장할 수 있다. 그러므로 n비트로 저장 가능한 숫자의 범위는 0 ~ 2ⁿ(n은 비트의 개수) - 1까지 이다. 4바이트는 32비트이므로 양의 정수로만 표현할 수 있는 숫자는 4,294..
자료구조와 알고리즘 (1)
다음 글은 위 책을 공부하면서 정리한 내용이다. 1. 자료구조와 알고리즘 자료구조란? 사람들이 사물을 정리하여 저장하는 것과 마찬가지로 프로그램에서도 자료들을 정리하여 보관하는 여러 가지 구조들이 있다. 이를 자료 구조(data structure)라 부른다. 컴퓨터 프로그램을 흔히 자료구조 + 알고리즘으로 이루어져 있다고한다. 알고리즘이란? 컴퓨터로 문제를 풀기 위한 단계적인 절차, 엄밀하게 이야기하면 알고리즘이란 문제와 컴퓨터가 주어진 상태에서 문제를 해결하는 방법을 정밀하게 장치가 이해할 수 있는 언어로 기술한 것이다. 따라서 알고리즘에는 입력은 없어도 되지만 출력은 반드시 하나이상 있어야 하고 모호한 방법으로 기술된 명령어들의 집합은 알고리즘이라 할 수 없다. 또한 실행할 수 없는 명령어(ex. 0..
[C] 모두의 C언어 복습&정리 (1)
C언어를 처음 배울 때 봤던 책이다. 그동안 까먹은 것도 있어서 오랜만에 다시 이 책을 보면서 C에 대해서 정리하려고한다. 아래 사이트에서 책의 내용을 볼 수 있다. https://thebook.io/006989/ 더북(TheBook): 모두의 C 언어 thebook.io 1. C언어의 유래 C언어는 1972년 벨(Bell)연구소의 연구원 데니스 리치(Dennis Ritchie)에 의해서 개발되었다. 왜 이름이 C언어일까? 사실 큰 의미는 없다. 벨 연구소에서 처음 진행한 프로젝트 이름이 A 프로젝트, 그 다음에 진행한 프로젝트 이름이 B 프로젝트, 그 이후에 C 프로젝트가 수행되었다. 그러다가 C 프로젝트에서 유닉스를 개발하는 과정 중에, 부산물로 컴퓨터 언어가 데니스 리치 연구원에 의해 만들어졌고, ..