Stack Unwinding(스택 되감기)
일반적으로 어떤 함수 호출 시 이 함수를 호출한 함수의 대한 주소를 call stack에 저장하고, 함수가 종료되면 stack에서 address를 pop하여 호출한 함수를 다시 호출한다. 이 일반적인 과정에서 Stack Unwinding(스택 되감기)는 pop과정에서 발생하게 되고, 함수 block안에 try~catch문에서 함수의 호출을 하다가 호출한 함수 내부에 어떠한 예외가 발생하였을 때 stack에 저장되었던 function의 address들이 제거되어 최초 try~catch를 호출한 fuction으로의 호출이 되는 것을 말한다. #include using namespace std; void function1() throw (int) { //this function throws exception ..Smart Pointer
일반적으로 pointer를 사용 시 매번 코드에 메모리를 생성하고 할당하는 작업을 같이 해줘야 하고, 이 작업을 해주지 않을 경우 메모리 누수나 메모리가 언제 할당되고 언제 해제 해야하는 지 프로그래머가 판단을 해야하는 입장에서 잘못된 로직으로 인해 할당 및 해제 작업이 제대로 이루어 지지 않아 메모리 낭비가 심해질 수 있다. 이를 방지 하기 위해 C++11 버전에서 메모리 할당 후 해제작업을 번거롭지 않게 자동으로 해제할 수 있도록 smart pointer 개념을 도입했고, java나 C#에서의 garbage collector의 메커니즘과 비슷하다. ① RAII(Resource Acquisition Is Initialization) C++창시자인 비야네 스트로스트룹은 C++에서 자원을 관리하는 방법으로..Virtual Function
가상함수(Virtual Function)는 기본 클래스에는 선언되어 있고, 기반클래스에는 재 정의되는 함수를 의미한다. 기반클래스와 기본클래스가 할당되어있고, 기본클래스에서 가상함수를 사용하는 입장에서 기반클래스의 인스턴스를 참조하게 된다면 run-time시간에 기반클래스의 재 정의된 가상함수를 가리켜 실행하게된다. 즉 자료형에 기반하지 않고 virtual pointer가 실제로 가리키는 객체를 참조하여 호출 대상을 결정 // CPP program to illustrate // concept of Virtual Functions #include using namespace std; class base { public: virtual void print() { coutDangling Pointer(허상 포인터)
Dangling Pointer는 컴퓨터 프로그래밍에서 유효한 객체를 가리키고 있지 않은 포인터를 말한다. 즉 유효하지 않은 주소를 참조하고 있는 포인터를 말하며 주로 객체 파괴시 발생하고, 할당 해제된 메모리를 다른 프로세스에게 재할당 해주게 되면 기존 프로그램이 허상포인터를 역참조하게 되어 예측할 수 없는 결과를 초래할 수 있고, 유닉스나 리눅스에서 segmentation fault나 윈도우에선 general protection fault가 발생할 수 있다. 객체 지향 프로그래밍의 경우 Garbage Collector로 인해 더 이상 참조되지 않은 객체를 파괴함으로써 예방할 수 있지만, C와 C++의 경우 예외되기 때문에 각별히 주의해서 사용해야한다. 자바 같은 언어에는 메모리 할당 해제를 명시적으로 ..Vector 컨테이너
Vector는 시퀀스 컨테이너이고 원소의 저장위치가 정해져 있는 배열기반 컨테이너이다. 가변길이의 컨테이너이고 원소를 컨테이너에 계속 추가하게 되면 추가 할때마다 메모리를 계속 재할당을 해주게 된다. 생성자 설명 vector v v는 빈 컨테이너이다. vector v(n) v는 기본값으로 초기화된 n개의 원소를 갖는다. vector v(n, x) v는 x값으로 초기화된 n개의 원소를 갖는다. vector v(v2) v는 컨테이너 v2의 복사본이다.(복사생성자 호출) vector v(b,e) v는 반복자 구간 [b, e)로 초기화된 원소를 갖는다. 멤버함수 설명 v.assign(n, x) v에 x값으로 n개의 원소를 할당한다. v.assgin(b,e) v를 반복자 구간 [b, e)로 할당한다. v.at(i..페이지 교환 알고리즘
페이지 방식을 취하는 가상 메모리에서 페이지 부재가 발생하면 메인메모리에 있으면서 사용되지 않은 페이지를 없애고 새로운 페이지를 만든다. (1) 비어있는 프레임이 없다면 현재 사용하지 않은 프레임을 찾는다. (2) 사용하지 않은 프레임이 있다면 발견한 프레임을 비우기 위해 프레임의 내용을 보조기억장치에 저장한다. (3) 페이지가 메모리에 더 이상 존재하지 않는다는 것을 알려주기 위해 페이지 테이블을 변화시킴으로써 프레임은 비게 된다. (4) 원하는 페이지를 디스크로 부터 읽어 프레임에 저장한다. (5) 새로운 페이지를 위하여 페이지 테이블을 수정한다. 위와 같이 페이지 부재로 인한 페이지 대치 과정은 페이지 부재처리 시간이 증가하는 결과를 가져와 엑세스 시간이 증가하여 시스템에 부담이 된다. 선입 선출(..전략 패턴(Strategy Patten)
실행중에 알고리즘을 선택할 수 있는 디자인패턴이며, 동적으로 행위의 필요한 경우 전략을 바꾸는 것만으로 알고리즘을 변경할 수 있도록 만든 패턴이다. 예를 들어 군인이 처음에 한 가지의 무기인 검만을 사용하지만, 나중에 기술의 발전으로 인해 총과 폭탄등 사용할 수 있다고 가정할 때 군인 내부의 구조를 바꿔 계속해서 새로운 기술을 사용할 수 있도록 해줘야하는 번거러움이 있다. 이를 개선하기 위해 무기들의 공통된 오브젝트를 가지고 무기를 바꿀때 마다 전략적인 행위를 취할 수 있도록 바꾸는 것을 전략 패턴이라 한다. (1) 디자인 원칙 ① 바뀌는 부분은 따로 뽑아서 캡슐화 시킨다. ② 교환 가능한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 하지 결정한다. (2) 소스코드 #pragma once #include..야미야미얌얌
프로그래밍 및 IT 기술