이 글에서는 유클리드 호제법의 증명과 원리를 다룹니다.
Unifox C++ 보고서 (하)
제4장. 클래스와 객체의 심화
가. copy and swap idiom
스마트 포인터와 같은 리소스를 관리하는 모든 클래스는 The Big Three라 불리는 것들을 구현해야 한다. 복사 생성자와 소멸자의 목표와 구현은 간단하지만 복사 할당 연산자는 어렵다. 이를 해결하기 위한 해결책이 복사 및 교환 관용구(copy and swap idiom)이며, 할당 연산자가 코드 중복(Code Duplication)을 피하고 강력한 예외 보장(Strong Exception Guarantee)을 제공하는 두 가지 작업을 지원한다.
작동 방식을 알아보자. 개념적으로 복사 생성자의 기능을 이용하여 데이터의 복사본을 만든 뒤, 복사된 데이터를 swap함수로 가져와 이전 데이터를 새 데이터로 바꾼다. 그 후, 임시 복사본이 삭제되고 이전 데이터가 삭제된다. copy and swap idiom을 사용하기 위해서는 복사 생성자, 소멸자, swap함수 3가지가 필요하다. swap함수는 클래스의 두 개체를 서로 바꿔주는 함수이다. swap함수를 직접 구현하지 않고 std::swap함수를 사용하고 싶을 수도 있겠지만, 이것은 불가능하다. std::swap은 구현 내에서 복사 생성자와 복사 할당 연산자를 사용하여 궁극적으로 할당 연산자를 자체적으로 정의하려 한다.
Unifox C++ 보고서 (상)
백준8983 사냥꾼
Unifox C언어 보고서 (하)
제 4장 메모리
가. 메모리 영역의 구성 요소
메모리에는 여러 가지 영역이 있다. 그 중, 프로그램이 OS로부터 할당 받는 대표적인 메모리 영역은 크게 4가지 가 있다.
메모리의 낮은 주소(low memory)부터 높은 주소(high memory)까지 차례로
코드(Code) 영역, 데이터(Data) 영역, 스택(Stack) 영역, 힙(Heap) 영역이 존재한다.
나. 코드(Code) 영역
코드 영역에는 여러 데이터가 들어간다. 대표적인 것 들을 살펴보자면,
우리가 작성한 소스코드가 코드 영역에 저장이 된다. 물론 컴파일 된 기계어 형태로 저장이 된다. 또한, 상수 도 코드 영역에 저장이 된다.
다. 데이터(Data) 영역
데이터 영역은 프로그램 시작과 함께 메모리에 적재되며, 프로그램 종료 시 메모리에서 해제가 된다. 이러한 특성을 가지고 있는 전역 변수와 정적 변수가 데이터 영역에 저장이 된다. 또한, 구조체도 데이터 영역에 저장이 된다.
참고로, 초기화 되지 않은 데이터는 BSS(Block Stated Symbol) 영역에 저장이 되고, 초기화 된 데이터만 데이터 영역에 저장된다.
라. BSS 영역
앞에서 서술한 대로 BSS(Block Stated Symbol) 영역에는 초기화가 되지 않은 데이터 들이 저장이 된다.
BSS영역에는 실제 변수가 차치할 공간이 할당되지 않아 그 만큼 binary size가 작아진다.
마. 스택(Stack) 영역
스택 영역은 함수 호출과 관계가 있는 각종 변수 가 저장되는 영역이다. 함수가 호출될 때 스택에 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소 값, 해당 함수에서 선언이 된 지역 변수가 저장이 된다. 이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라 한다.
```cpp
void f () {
//something
}
Unifox C언어 보고서 (상)
[이진트리] 이진트리의 순회
지난 글에서는 이진트리의 간단한 구현 방법을 다뤘습니다.
이번 글에서는 이진트리의 전위, 중위, 후위 순회에 대해 알아봅시다.
[이진트리] 이진트리의 구현
구조체 포인터를 활용한 구현
전에 Left-Child Right-Sibling 방식을 다룬 적이 있습니다.
이 방법은 각 노드의 차수가 다양할 때 생기는 문제를 해결해주었습니다.
하지만, 이진트리는 차수가 0, 1, 2 중 하나이기 때문에 LCRS 방식을 쓰지 않아도 비교적 간단하게 나타낼 수 있습니다.
[이진트리] 이진트리의 개념
이진트리란?
지난 글에서는 차수가 N인 트리의 대하여 설명했습니다. 이 글을 포함해서 앞으로 몇 개의 글에서는 트리 중에서도 차수가 2 인 이진트리만을 다루겠습니다.
이진 트리는 차수가 2 인 트리입니다. 영어로는 Binary Tree입니다.
[이진트리] 트리의 표현방법
트리는 꽤 다양한 방법으로 표현할 수 있습니다.