728x90

프로그래밍 138

CPU의 내부 구성 - 레지스터

레지스터 - CPU 내부의 작은 임시저장장치이다. - 프로그램속 명령어 & 데이터는 실행 전후로 레지스터에 저장된다. - 가장 기초적인 단계에서부터 실행되는 순서, 원리등을 레지스터를 통해 관찰할 수 있다. * 프로그래머 입장에서는 관찰할 일이 많은 레지스터가 ALU나 제어장치보다 중요하다고 볼 수 있다. * 로우레벨 단계 개발자는 관찰할 일이 정말 많다고 한다. 대표적인 레지스터의 종류 1. 프로그램 카운터 2. 명령어 레지스터 3. 메모리 주소 레지스터 4. 메모리 버퍼 레지스터 5. 플래그 레지스터 6. 범용 레지스터 7. 스택 포인터 8. 베이스 레지스터 각각의 레지스터 설명 1. 프로그램 카운터 - 메모리에서 가져올 명령어의 주소를 저장하고 있다.(메모리에서 읽어드릴 명령어의 주소) - 명령어가..

알고리즘의 성능 분석방법

핵심 1. 시간복잡도를 중심으로 최악의 경우를 판단하여 알고리즘의 성능을 분석한다. 2. 연산의 중심이 되는 연산자의 연산횟수를 계산해서 T(n)함수를 그래프로 나타낸다. 알고리즘을 평가하는 두가지 요소 - 시간복잡도(time complexity) -> 얼마나 빠른가? - 공간복잡도(space complexity) -> 얼마나 메모리를 적게 사용하는가? 두개중 시간 복잡도를 더 중요시 한다고 한다. 시간 복잡도의 평가방법 - 중심이 되는 특정 연산의 횟수를 세어서 평가를 한다. - 데이터 수에 대한 연산 횟수의 함수 T(n)을 구한다. -> 함수를 그려놓으면 그래프로 볼 수가 있게 된다. -> 데이터가 늘어남에 따라 연산횟수가 얼마나 늘어나는지가 정말 중요하기 때문에 T(n)을 구한다. 알고리즘의 수행 ..

ALU와 제어장치

ALU - 계산하는 장치이다. ALU가 받아들이는 정보 - 레지스터로부터 피연산자를 받아들인다. - 제어장치로부터 제어신호를 받아들인다. -> 계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다. * 플래그 레지스터 1) 플래그 레지스터의 종류 - 부호 플래그 : 연산한 결과의 부호를 나타낸다. - 제로 플래그 : 연산 결과가 0인지 여부를 나타낸다. - 캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는지 나타낸다. - 오버 플로우 플래그 : 오버플로우 발생여부 - 인터럽트 플래그 : 인터럽트가 가능한지 나타낸다. - 슈퍼바이저 플래그 : 커널모드로 실행중인지, 사용자 모드로 실행중인지 나타낸다. ALU가 내보내는 정보 - 레지스터로 결과값을 내보낸다. - 플래그 레지스터로 플래그 값을 내보낸다...

빅-오 표기법(Big-Oh Notation)

핵심 핵심은 최고차항을 제외한 나머지는 무시하는것이다. 내용 T(n)이 다항식으로 표현될 경우 사례가 많아질수록 최고차항이 아닌 나머지 항들의 영향력은 작아진다. 따라서 최고차항을 제외한 나머지는 무시한다. 로그형과 상수형의경우 데이터가 많이 유입될 수록 연산 시간이 지수형과 달리 늘어나는 폭이 줄어들고 있으므로 요즘과 같은 빅데이터의 시대에서 좋은 알고리즘이다. 당연히 데이터가 늘어날 수록 시간도 배로 늘어나는 지수형 알고리즘은 절대 써서는 안되는 알고리즘이다.

열혈 자료구조 책 공부를 시작합니다.

프로그래머라는 직업을 갖고 멀리 나아가는데 있어서 중요한 부분이 무엇이 있을까 조금씩이라도 꾸준하게 해나가야 하는 부분들 중에 자료구조는 당연히 중요하다고 생각합니다. 윤성우 저자님의 열혈 자료구조를 공부하며 프로그래밍적으로 기초 실력을 높이면서 시야도 넓히고자 합니다. 현재 게임 클라이언트 프로그래머를 준비하며 Unity와 C# 문법에 익숙해져 있었던 상황이라서 C언어로 구성되어있는 이 책을 읽는데 또 많은 시간이 소모될 것 같습니다. 꾸준함이 쌓이면 또 큰 힘이 될것이라고 믿기때문에 자료구조에 대한 전반적인 이해와 C언어에 대한 실력도 함께 늘어나기를 기대합니다.

Unity 기본 지식 정리

오히려 Unity 공부를 시작하며 프로젝트 진행을 하며 배우는것이 늘어나다보니 Unity에 대한 내용정리가 소홀해 졌던것 같습니다. 가벼운 기능들부터 새롭게 배우는 기능들까지 천천히 하나씩 정리해 나가보려고 합니다. 이 글도 7월경 작성을 하려다가 임시저장을 해놓은 뒤 추가로 더 써야겠다는 생각에 업로드를 하지 않게되어 그 다음글들조차 추진력을 잃는것같아서 업로드를 하는 글입니다. 앞으로 좀 더 꾸준하게 새로운 지식들의 모르는부분이나 오류, 어려웠던 부분을 중심으로 작성을 해보려고 합니다. 1. 각 화면의 구성 Unity에서 프로젝트를 열게되면 처음 만나게 되는 화면이다. 사실 위 사진은 레이아웃 변경을 통해 진짜 처음보는 사람과는 화면이 다를것이다. 기본적인 구성은 똑같다. Scene에서는 작업자가 작..

소스코드와 명령어 feat C언어의 컴파일 방식

우리는 통역가가 필요하다. 새로운 컴퓨터언어를 배워서 소스코드를 작성한다 한들 우리는 통역가가 필요하다. 왜냐하면 컴퓨터는 0과 1로 이루어진 기계어를 사용하기 때문이다. 고급 언어 우리가 소스코드에 흔히 사용하는 언어들 C#, C++, C등은 고급언어이다. 개발자가 읽고쓰기 편하게 만들어졌기 때문이다. 저급 언어 내부에서 실행될 때는 컴퓨터가 읽고 쓰기 편한 언어들로 변환이 필요하다. 1) 기계어 - 0과 1로 이루어진 명령어로 구성된 언어 2) 어셈블리어 - 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어 (어셈블리어는 기계어와는 다르게 소스코드에 직접적으로 명시하는 경우도 있다고 한다.) 고급언어가 저급언어로 변환되는 과정 ** 먼저 변환과정에는 인터프리트와 컴파일 방식이 있는데 정확..

Window/Mac 한글 깨지는 오류 원인 - 컴퓨터가 숫자와 문자를 표현하는 방법

숫자를 표현하는 방법 1. 정보 단위 - 최소 단위로는 비트(bit)가 있다. - 1비트로는 0과 1을 표현할수 있으므로 2가지를 표현할 수 있다. - 2비트로는 4가지, 3비트로는 8가지, 즉 2의 제곱으로 표현범위가 늘어난다. - 1byte = 8 bit - 1KB = 1000byte - 1MB = 1000KB - 1GB = 1000MB - 1TB = 1000GB * 1024개씩 묶게되면 KiB / MiB / GiB 이렇게 부른다. 2. word (워드) CPU가 한번에 처리할 수 있는 정보의 크기 단위이다. - 하프워드 / 풀 워드 / 더블 워드 라는 용어도 있다. 3. 0과 1로 음수를 표현할때는 2의 보수법을 사용한다. = 어떤 수를 그보다 큰 2n에서 뺀 값이다. [2진수] 11을 음수로 표현..

[백준] 10951번 A+B, EOF(End-of-file)

백준 10951번은 EOF에 대한 이해가 있어야 풀 수 있다. 문제 내용자체가 입력은 계속해서 받아야 하는데 어느 시점에서 끝내야 하는지 현재까지 내가 알고있는 내용으로는 해결하기 어려웠다. EOF = End of File이며 -1 값을 갖고있다. 파일의 끝을 표현하기 위해 정의해 놓은 상수이다. C언어에서는 파일의 끝에 도달했을때 언제나 이 값을 반환한다. 유닉스(Unix)시스템에서는 라인의 시작위치에서 Ctrl+D를 누르면 발생하고 윈도우에서는 명령창에서 Ctrl+Z를 누르고 나서 Enter를 누르면 발생한다고 한다. #include int main() { int a,b; while(scanf("%d %d",&a,&b) != EOF) { printf("%d\n",a+b); } }

728x90