| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 언리얼엔진5
- 게임개발
- DX
- leveleditor
- 수학용어정리
- 프로그래밍일기
- 각도변환
- 자료구조정리
- 25.06.11dir
- bttask
- c++용어정리
- 프로그래밍
- 게임엔진튜토리얼
- c++
- directx
- 언리얼ai
- 언리얼엔진공부
- 언리얼엔진
- c++porinter
- unrealengineai
- 월드아웃라이너
- 자료구조
- 언리얼비헤이어비어트리
- c언어정리
- uaiperception
- ipc(inter process communication)
- livrary
- 자료형타입
- c++class
- 영단어정리
- Today
- Total
루리코딩 세상
C언어 정리하기 본문
C++ 아무것도 모르고 공부하다가 찾아보니, C에서 파생된 언어가
C++ 그 외의 다양한 언어들로 파생된 것을 찾을 수 있었다.
개념적으로 계속 혼동되는 부분이 있어서 C에 대한 내용을
정확하게 정리해두고 C++ 외 다른 언어 및 라이브러리를 보는 것이
더 효율적일 것이라 판단되어 잠시 내려두고 단단하게 기초를 만드려 따로 정리하려한다.
C언어는 1972년에 출시된 언어로, 현대의 비약적으로 발전한 컴퓨터와는 다르게 메모리의 크기가 64KB에서 시작된 조그만 메모리를 가진 컴퓨터에서 활용한 것도 큰 차이점으로 볼 수 있을 것이다. 이러한 적은 메모리의 크기는 추상화가 적어 하드웨어와 직접적으로 접근하여 작동 원리를 활용하는 것으로, 효율성이나 집적 능력을 더욱 극대화하는데 활용이 가능하다.
컴퓨터는 일련의 연산을 수행하는 계산기로 그 속도가 무려 1초에 대략 10억번의 연산을 처리하는 능력을 발휘한다.
하지만 이러한 CPU의 능력은 레지스터의 크기 축소로 이뤄져 저장 공간을 따로, 만들어줘야하는 구조로 되었다.
그렇게 발전한 구조가 아래의 사진과 같다.

사용자는 컴퓨터에게 필요한 일련의 연산을 "명령" 해 주어야하는데, 이러한 명령을 작성하는 방법은 다음과 같다.
먼저 이해해야 할 것은 CPU에서 RAM에 데이터를 쓰는 것이다.
- 램의 어디에다 쓸지
- 램에 무엇을 쓸지
- 램의 해당 위치부터 얼마만큼 공간에 쓸지
를 고려해야 되는데, 이는 쓰레드와 프로세스에 대해서 정리하면서 이해됬었던 부분이었다.
이때 사용되는 명령어의 집합을 ISA라고 했다. 개인종합자산관리계좌말고 컴퓨터 언어에서도 ISA가 있었다,,
컴퓨터의 ISA는 (Instruction Set Archutecture, 명령어 집합 아키텍처)로 프로세서가 이해하고 실행 할 수 있는
기계어 명령어의 집합과 이 명령어들이 실행되는 방식을 규정한다.
| 명령어 집합 | CPU가 인식하고 실행할 수 있는 기계어 명령어들의 모음이다. | |
| 아키텍처 | 명령어들이 어떻게 실행되는지, 메모리 접근 방식, 레지스터의 사용 방식, 인터럽트 처리 방식 등 컴퓨터의 기본 구조를 정의한다. | |
| 인터페이스 | 하드웨어와 소프트웨어(프로그램)이 서로 통신하는 방식, 즉 소프트웨어에서 하드웨어에게 명령을 내리고, 하드웨어에서 소프트웨어에게 결과를 전달하는 방식을 규정한다 |
ISA는 컴퓨터의 성능과 기능에 직접적인 영향을 미치며, 소프트웨어 개발자가 다양한 아키텍처에서 실행 할 수 있는 프로그램이 될 수 있도록 한다. ISA는 다양한 종류가 있고, CISC(복잡 명령어 집합 컴퓨터) RISC(간소 명령어 집합 컴퓨터) 등이 있다.
mov BYTE PTR [rax], 3 // 어셈블리어로 작성된 예제문구
간단한 C언어의 명령어를 작성해보았다. 이러한 언어는 사람이 이해하고 읽어내기 난해하기 때문에
사람이 이해하기 쉽게 작성하는 명령어를 "프로그래밍 언어"라고 이야기하며,
이렇게 작성된 프로그래밍 언어를 어셈블리로 바꿔주는 과정을 "컴파일" 이라한다. 이러한 컴파일을 진행하는 프로그램을
"컴파일러(Compiler)"라 부른다.
통합적인 개발 환경을 위해서는 컴파일러/코드 편집기/디버거의
과정을 거쳐야하는데 이를 모두 합쳐놓은 시스템이 바로 비주얼 스튜디오였다.
지금 한달 동안 공부하면서, 느낀 점은 디버거의 과정에 대한 이해나 용어를 전혀 놓치고 있었다는 것을 알 수 있었다.
위와 같은 컴퓨터의 일련의 과정을 이해하고나니, 하드디스크 또는 SSD에 저장된 프로그램을 RAM에 기록하여,
사용하는 사람의 "명령" 이를 수행하는 입출력장치인 마우스나 키보드의 입력을 인식하여, CPU가 처리하는 것에
대하여 이해할 수 있었다. 이러한 복잡한 과정을 OS라는 프로그램을 활용하여, 편의성 혹은 프로그래밍으로 작성된
프로그램에 들어가 있는 코드를 "재사용"하는 과정들을 통하여 우리가 즐겨하는 게임, 혹은 일상 생활의 편의성을
주는 다양한 프로그램으로 발전한 것도 추상할 수 있었다.

즉 우리가 자주보던 작업 관리자에서, CPU-메모리-등등의 다양한 항목들은 효율적으로 현재 PC에서 프로그램이 잘 작동하고 있는지에 대한 판단의 밑거름이 될 수도 있음을 시사하고 있었다. 프로그래밍된 프로그램들이 PC에 설치된 RAM메모리에 실행하는 과정에 있어서 메모리 주소값에 각 파일별로 설치된 이미지, 혹은 데이터, char형의 문자와 같은 다양한 형식을 불러오고, 삭제되는 1초의 10억번의 해당하는 기능을 활용해서 적절하게 운용되는 매커니즘까지 추상할 수 있을 것이다.
이러한 과정에 있어서 다중 프로그램을 실행하게되면, 여기서 하나의 "가상 메모리와 물리 메모리"에 대해서 고민을 해보아야 하는데, CPU가 참조하는 메모리의 값을 가상 메모리(virtual memory)라하고, 일련의 변환 과정에 의해 참조하게될 실제 메모리의 주소값을

물리 메모리(physical memory) 라고한다.
이러한 변환 방식을 페이징(Paging)이라고 하고,
변환이 되는 최소의 메모리 단위를 페이지(page) 라고한다.
이러한 특성으로 인해서 64bit, 32bit 운영 체제는 각각 한번의 처리 할 수 있는 Byte의 크기 차이가 발생되며,
64bit는 8Byte
32bit는 4Byte 의 연산을 처리하는 특성을 갖게된다.
가상 메모리 상의 주소값은 같지만,
실제 램에서는 서로 다른 물리 메모리를 참조하게 된다.
작성하면서 느낀건 문자열에 대한 이해도 및 함수(Function)에 대해서 다소 이해도가 떨어지는게 느껴졌다.
함수 부분은 수학 공부하면서 기초적인 것부터 정리되면 문자열 해석 및 문제 해결 능력이 다소 늘어날 듯하다.
- (25.05.29) 블로그 카테고리 수정 수학 관련 지식 // 함수, 삼각함수, 기하학 부분 추가
참고문헌 : 모두의 코드 https://modoocode.com/231
씹어먹는 C 언어 시작하기
모두의 코드 씹어먹는 C 언어 시작하기 작성일 : 2009-04-15 이 글은 1005195 번 읽혔습니다. 안녕하세요 여러분. 씹어먹는 C 언어를 연재하고 있는 Psi 입니다. 제 강좌는 제가 참고했던 무수히 많은 책
modoocode.com
'이론 > C++ 키워드 정리' 카테고리의 다른 글
| OOP_추상화(Abstraction) (0) | 2025.06.07 |
|---|---|
| 추상 클래스, Template Method Pattern (0) | 2025.06.07 |
| c++ : l-value, r-value : 좌측값과 우측값 (0) | 2025.06.04 |
| 디자인 패턴 (0) | 2025.06.02 |
| assert.h (0) | 2025.06.01 |