본문 바로가기

정글37

TIL(15일차) 링커 오늘은 링커에 대해 간단히 공부했다. 먼저 링커를 알기 전 링킹(Linking)에 대해 알아보자 링킹 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업을 링킹이라고 한다. 컴파일시 수행되고 소스코드가 머신머신코드로 변환된다. 옛날에는 수동으로 했지만 이 링킹 작업을 현재는 링커가 자동으로 해준다. 링커는 왜 중요할까? 링커는 독립적인 컴파일을 가능하게 한다. 큰 규모의 응용프로그램을 한 개의 소스 파일로 구성하는 대신 별도로 수정 할 수있고, 컴파일할 수 있는 보다 관리가 편한 규모의 작은 모듈로 나눈다. 링커를 이해하는 것은 큰 프로그램을 작성하는데 도움이 된다. 링커를 이해해야되는 이유를 5가지를 보면 다음과 같다. 1. 큰 프로젝트 할때.. 2023. 5. 6.
TIL(14일차) 메모리누수 C언어로 RB트리 구현하기 첫날이다. 먼저 C언어 대해서 가볍게 리마인드하고 가는 날이기도하다. C언어에서는 malloc()이라는 함수로 힙 영역의 메모리를 할당 받는데 할당 방식은 다음과 같다. 사진 참고 : https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/ malloc를 사용하는데는 조심해야되는데 메모리 누수가 일어날 수도 있기 때문이다. 메모리 누수 메모리 누수의 사전 정의는 다음과 같다. "메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비.. 2023. 5. 5.
TIL(13일차) re : 프로시저 프로시저 프로시저 호출은 소프트웨어에서의 주요 추상화이다. 잘 설계된 소프트웨어는 무슨 값이 계산되고, 이 프로시저가 프로그램 상태에서 무슨 효과를 갖는지에 대한 맹쾌하고 간결한 인터페이스 정의를 제공한다. 일부 동작의 구체적인 구현은 감춰주는 방식의 프로시저를 추상화 매커니즘으로 사용한다. 프로시저가 호출 될때 아래 3개중 1개 이상의 메커니즘이 연관된다. * 제어권 전달: 프로그램 카운터는 진입할 때 다른 프로시저에 대한 코드의 시작주소로 설정되고, 리턴할 때는 시작 프로시저에서 다른 프로시저를 호출하는 인스트럭션 다음의 인스트럭션이 설정되어야 한다. * 데이터 전달 : 프로시저는 하나 이상의 매개변수를 다른 프로시저에 제공할 수 있어야 한다. 호출된 프로시저는 다시 처음 프로시저로 값을 리턴할 수 .. 2023. 5. 4.
TIL(12일차) 플로이드 워샬 알고리즘 플로이드 워샬 플로이드 워샬 알고리즘은 다이나믹 프로그래밍 기법을 사용한 그래프 최단거리 구하기 알고리즘중 하나이다. 참으로 동적 프로그래밍은 중복된 연산을 줄이는 방법을 의미한다. 어떠한 그래프가 있다고 하면 어떠한 노드를 거쳐가는 것을 포인트로 하여 구현화한 알고리즘이다. 인접행렬표를 생성하고 T(1)이라고 하면 1번 노드를 거쳐서 해당 위치로 최소 가중치를 표에 계속 갱신한다. 아래와 같은 그림이 있다고 해보자 T(p) -> T(1)이 있다고 하면 1을 거쳐서 가는 방법 즉, 2번 노드에서 1번을 거쳐서 3번노드를 가는 최소치와 4번노드를 가는 최소치를 갱신한다. T(2)도 2번 노드를 거쳐서 1번,3번,4번을 가는 최소치를 갱신한다. 위와 같은 작업을 반복하면 그림의 오른쪽 표처럼 갱신이 된다. .. 2023. 5. 3.