프로그래밍
-
메모리 구조C언어 2020. 3. 16. 15:19
저번 포스트에서 사용자가 작성한 C 프로그램이 어떤 과정을 통해서 실행파일이 되는지 다루었다. 또한 이렇게 만들어진 실행파일은 실행 될 때 Load 과정을 통해 메모리 영역에 담긴다고 하였다. 이번 포스트에서는 이렇게 생성된 실행파일이 어떻게 메모리에 들어가게 되는지에 대해 다룰것이다. 그전에 C언어로 작성한 파일을 실행 파일로 바꾸는 과정을 잠깐 살펴보자 1. C 언어 프로그램 작성 2. 선처리 과정을 통한 프로그램의 실질적 동작을 나타내는 코드와, 추가적인 정보를 나타내는 부분을 분류 3. 컴파일 과정을 통해 해당 코드가 바이너리 형태로 생성 즉 바이너리 파일이 생성 4. 링크 과정을 통해 해당 바이너리 파일과 외부에서 가져온 기능이 있는 바이너리 파일을 합쳐서 실행파일 생성 위와 같은 과정을 통해 ..
-
C 프로그램의 동작 과정C언어 2020. 3. 16. 13:09
이번 포스트에서는 C 언어로 작성한 프로그램이 어떤식으로 동작하는지에 대한 순서를 살펴볼 것이다. 1. Editor 를 이용한 프로그램 작성 ( C언어로 작성 된 파일 ) EX ) 비쥬얼 스튜디오 같은 에디터로 C언어를 이용하여 프로그램을 작성한다 ( 함수, 변수, 조건문, 반복문 등을 이용해 작성 ) 2. Compiler 를 이용한 오프젝트 파일 생성 ( 바이너리 형태로 작성 된 코드 ) Editor 로 작성한 (C 언어 형태) 프로그램을 컴파일러를 사용해 컴퓨터가 인식할 수 있는 바이너리 형태로 작성 된 파일을 생성 한다는 의미이다. 이때 컴파일과정 내부는 2단계로 나눌 수 있다. 1 단계 Preprocessor (전 처리기) : 컴파일시 가장 먼저 수행 되는 과정으로 선처리 과정을 의미한다. 이 선..
-
스택 프레임 & 재귀함수C언어 2020. 3. 13. 06:00
OS는 하드웨어 자원 중 하나인 메모리를 하나의 논리적 메모리로 관리한다. 이렇게 관리하는 것이 가상메모리 시스템이다. 이런 가상메모리는 내부적으로 커널영역과, 유저영역이 나뉘어 지며 사용자에게 허용되는 영역은 유저영역이다. 유저영역은 내부적으로 여러 공간으로 나뉘어서 관리되고 있다. 이번 포스트에서는 그중 스택영역에 대해서 설명 할 것이다. 스택 프레임 함수내부의 즉 스코프 안의 영역에서 선언 되는 변수, 매개변수는 자동변수이며 변수의 메모리할당, 반환의 과정을 OS가 자동으로 관리해 준다고 하였다. 또한 이러한 자동 변수를 관리하는 메모리가 바로 Stack 영역의 메모리인 것이다. 따라서 프로그래머라면 Stack 메모리가 어떻게 관리되는지 정확이 이해할 수 있어야 한다. 이러한 관리 형식을 스텍 프레..
-
ARM 용어 정리컴퓨터 공학 기초/용어 2020. 3. 12. 03:43
해당 포스트의 모든 내용 해당 페이지에서 퍼온 내용임 https://cafe.naver.com/embeddedcrazyboys/1346 ARM ... 대한민국 모임의 시작, 네이버 카페 cafe.naver.com 2009년 새로운 다짐으로 시작하는 첫해인데요. 노트북도 사고 여러가지로 환경은 좋아졌습니다. 이제 열공하는 일만 남은듯 합니다. 요즘 제가 Arm System Developer's Guide (2004)를 읽고 있습니다. 바이블이라고 많은 사람들이 읽으라고 했었던 것인데 늘 미루다가 이제서야 읽게 되었네요. 시작이 반 아니겠습니까 ㅎㅎ ^^;; 아래 내용은 원래 제 팀원이 정리했던 자료인데 나름 ARM에 대해 정리하는 의미는 될듯 해서 올려봅니다. -------------------------..
-
CPU 용어컴퓨터 공학 기초/용어 2020. 3. 12. 02:37
프로세서란 ? 프로세서란 어떤 것을 처리하는 기능을 가진 하드웨어 또는 소프트웨어를 뜻한다. 하드웨어의 프로세서는 기억, 연산, 제어의 3대 기능을 처리하는 장치 (칩)을 나타낸다. 따라서 CPU, MPU, MCU는 모두 프로세서의 일부이다. CPU : 연산 기억, 제어등의 역할에 추가적으로 주변 하드웨어를 제어하는 역할을 한다. 범용적이고 큰 일을 처리하며 고속프로세서이다. 클럭 속도가 가장 높다. MPU : 초소형 연산처리 장치이다. 주변 장치가 필요하며 가벼운 운영체제를 설치할 수 도있고 네트워크 통신 등을 할 수 있는 모델이 많이 출시 됨 ex 라즈베리파이 MCU : 집적 회로 ( 하나의 반도체 기판에 다수의 능동소자와 수동수자를 초소형으로 집적 시킨 구조, 즉 서로 분리 될 수 없는 구조로 만든..
-
포인터의 이해C언어 2020. 3. 7. 21:15
이번 포스트는 포인터에 대해서 조금더 확실하고 어떤식으로 포인터를 연산하는지에 대해서 더 자세하게 다룰 것이다. 위의 자료는 포인터가 어떤 역할을 수행하는지 나타낸다. 가장먼저 pn 변수를 강제 자료형 변환을 시켰을 때 이다 이때 변환한 자료형은 int *로 기술하였다. 다음과 같이 변수를 포인터로 형변환 시키면 변수에 담긴 값 (주소)에 해당하는 메모리에 내용을 int로 해석하겠다는 의미이다. 따라서 pn 변수에는 1이 있으므로 1을 주소로 인식하며 해당 주소에 있는 메모리의 값은 int로 해석하게된다. 다음은 변수 a에 대한 주소를 강제 자료형 변환 시켰을 때 이다. 위와 마찬가지로 int *으로 기술. 따라서 &a에 대한 연산 결과인 a 변수의 주소가 주소인 형태로 상수화 되면서 해당 상수화 된 주..
-
배열의 이해C언어 2020. 3. 5. 19:54
수정 필요 이번 포스트에서는 한가지 재미있는 주제에 대해서 다룰것이다. 바로 char ch[10] = { "Hello" } 와 같이 문자(배)열을 선언과 동시에 "Hello" 라는 문자열 상수로 초기화 하였을 때 내부적으로 어떤 과정을 통해서 문자 배열 ch에 "Hello" 라는 문자열 상수가 들어가는지에 대해서 다룰 것이다. 위의 내용을 다루기 앞서 자료형의 개념에 대해서 다시 짚고 넘어가면 다음과 같다. 자료형은 일정 길이의 메모리에 있는 자료 또는 정보를 해석하는 방법이라고 하였다. 즉 메모리에 61 이라는 값이 있다고 하면 이 값을 int 로 해석하면 부호있는 10진 정수 61이 되는 것이고 반대로 char로 해석하면 61이라는 값은 'a' 라는 문자로 해석이 될 수 도 있다는 의미이다. 위와 같..
-
메모리 복사C언어 2020. 3. 5. 18:24
이번 포스트에서 다룰 내용은 메모리에 담긴 값을 복사하는 방법에 대해서 다룰 것이다. 가장 쉽게 복사하는 방법은 단순대입 연산자를 통하여 r - value 의 값을 왼쪽의 l - value 의 값으로 옮기는 방법이다. int main(void) { int num = 10; int cp_num = 0; cp_num = num; printf("%d", cp_num); } 또한 l-value의 값은 항상 변수만 가능하다. 따라서 cp_num 이라는 변수에 0이라는 값을 over write 하고 num이라는 변수에 있는 10이라는 값을 새롭게 넣은 것이다. 그렇다면 이러한 인스턴스들의 집합은 어떻게 복사해야 하는가 ? 즉 배열의 경우 어떻게 복사하여야 하는가 ? 라는 의문이 생긴다. 한번 위의 경우와 같이 복사..