TIL 0319

생각해둔 공부 키워드를 마무리 해야한다.
중요도를 정하질 못해서 그런지, 오늘 스케줄 내내 중구난방의 시간이었다.

정수론과 완전 탐색에 대해 많이 찾아봤는데, 자세한 내용은

완전 탐색 : https://hyeonistic.tistory.com/19

 

완전 탐색 (Brute Force)

완전 탐색브루트 포스로도 불리는 완전 탐색은 제목 그대로 싸그리 찾는 컨셉이다.무식하게 때려박을 수 있는 문제는 이것부터 써내려가곤 한다.1차적으로 해결이 목표일 때는 여기서 시작해서

hyeonistic.tistory.com

정수론 : https://hyeonistic.tistory.com/20

 

정수론

정수론은 수학에서 원래 수학에서 다루던 이야기인데, 자연수에 대한 깊이 있는 내용을 다룬다.많은 알고리즘 문제와 관련이 있고, 실무에서도 자주 사용된다.아래에 설명 할 것은 정수론 내에

hyeonistic.tistory.com

여기서 목차 느낌으로만 정리했다.

코드 치기

현재 코드에 대한 노선을 이렇게 정했다.

  1. 주마다 정글에서 제공하는 과제
  2. 바킹독과 홍박사

이 부분에 대한 우선순위는 컨디션, 해당 주에 무얼 하냐에 따라 변동이 있다.

코드 치기를 정글 전체적인 커리큘럼과 엮어가려고 시도했던 것중 오늘 했던 것이 바킹독의 배열 부분이다.
남김 없이 풀긴 했지만, 뭔가 아무것도 안남았다는 느낌이 들어서 살짝 허전하다.
이 시간 쯤 되면 해결 못한 무언가가 남아서 자꾸 나 자신을 괴롭히고 있어야하는데..

조금만 더 해봐야겠다.

컴퓨터 시스템은 하드웨어와 소프트웨어가 함께 작동하며 응용 프로그램을 실행한다.
그리고 이 응용프로그램의 구성 중 특히나 소프트웨어는 소스 프로그램이라는 곳에서 그 life cycle을 시작하게 되는데,
소스 프로그램은 0 또는 1로 표시되는 비트들의 연속이며, byte라는 8비트 단위로 구성된다.

이 소스 프로그램을 위한 글자 시스템으로 컴퓨터는 ASCII를 사용한다. (영어, 숫자, 일부 특수문자에 한해)
ASCII 표준은 각 문자의 바이트 길이를 정수 값으로 나타낸다.

#include <iostream>
using namespace std;

int main()
{
	return 0;
}
  • 이러한 소스.cpp가 있다고 하자. 이 파일처럼 ASCII 로만 이루어진 파일들을 텍스트 파일이라고 부른다.
    다른 모든 파일은 바이너리 파일이라고 부른다.
  • 이 파일의 표시 방법은 기본 개념을 암시하기도 한다.
    모든 시스템 내부의 정보, 메모리 상의 프로그램, 네트워크를 통해 전송되는 데이터 모두 비트(0과 1)로 표시 된다.

 

linux > gcc -o hello hello.c

이 명령어는 linux에서 gcc라는 컴파일러를 통해 hello.c라는 소스 프로그램을 hello라는 실행가능 목적파일로 변환을 명령하는 내용이다.
여기서 컴파일러는 소스파일을 실행 파일로 번역한다. 과정에 따라 거치는 내용들을 순서대로 읊어보겠다.

hello.c라는 이름의 소스 프로그램은 우선 전처리기로 이동된다.

전처리기
전처리기는 #로 시작하는 디렉티브에 따라 수정한다. C 계열 소스 프로그램 초반부에 #include <stdio.h>를 예로 들면,
헤더 파일은 프로그램 문장에 직접 삽입을 지시한다. 결과적으로, .i 형식의 새로운 C 프로그램이 생성된다

전처리기를 지난 소스 프로그램은 .i (Modified Source Program) 으로 변환된다. 이 파일은 컴파일러로 전달된다.

컴파일러
앞에서 작업한 텍스트 파일 .i를 .s로 번역하며, 어셈블리어로 변환되어 저장된다.
어셈블리어는 여러 상위수준 언어의 컴파일러를 위한 공통의 출력언어를 제공하기 때문에 유용하며, 모듈화 된 설계이다

컴파일러를 지난 파일은 .s (Assembly Program) 으로 변환된다. 이 파일은 어셈블러로 전달된다.

어셈블러
여기서는 .s 파일을 기계어로 번역하고, 실행 중에 재배치 가능한 목적프로그램의 형태로 묶는다.
그리고 .o 형식의 목적 파일에 결과를 저장한다.

메모리 상 재배치 가능한 목적프로그램 (Relocatable Object Programs)이 된 소스 프로그램은 링커에 전달된다.

링커
소스 프로그램 내 사용한 함수가 있다면, 해당 함수의 링크 파일이 여기서 결합된다. printf라는 함수가 소스 프로그램 안에서 사용 되었다고 하자. printf 함수는 이미 컴파일 된 별도의 목적파일인 printf.o에 들어있으며 링커 프로그램이 통합 작업을 수행하게 된다. 그 결과 hello는 실행 가능 목적파일로 메모리에 적재되고 실행된다.

컴파일 시스템의 작동을 알아야 하는 목적

  1. 프로그램 성능 최적화를 위해
  2. 링크 에러의 이해를 위해
  3. 보안 약점을 피하기 위해

전형적인 시스템의 하드웨어 구성

여긴 적은 정성을 생각해서.. 캡처한걸 그대로 끌고왔다.

 

'TIL' 카테고리의 다른 글

포인터의 연산  (0) 2025.04.12
트리 순회에 대해 논하기  (0) 2025.03.27
TIL 0318, 더더덜 쉬운 문제와 이론 공부  (0) 2025.03.19
TIL 0317, 더덜 쉬운 문제 풀이  (0) 2025.03.19
TIL 0315, 조금 덜 간단한 문제 풀이  (0) 2025.03.19