본문 바로가기

분류 전체보기113

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.
TIL(11일차) 어셈블리어에서의 포인터, 다중배열 어셈블리어에서 단항 연산자 '&'와 '*'는 포인터의 생성과 역참조를 수행한다. 어떤 객체를 나타내는 식 Expr이 있다면 &Expr은 객체의 주소를 주는 포인터가된다. 주소를 나타내는 식 AExpr에 대해 *AExpr는 그 주소의 위치한 값을 준다. 따라서 Expr와 *&Expr는 동일하다. 인덱스 i가 레지스터 %rdx와 %rcx에 각각 저장되어 있는 경우 대해 생각해보면 E와 관련된 수식들은 아래에 표와 같이 표현 할 수있다. 결과 값 레지스터는 %eax(데이터) 또는 %rax(포인터)에 저장하는 수식의 어셈블리 코드이다. 다중배열 C언어에서 다중 배열은 일반적으로 다음과 같이 선언한다. int A[5][3]; typedef int row3_t[3]; row3_t A[5]; 배열 A는 다섯 개의 행.. 2023. 5. 2.