본문 바로가기

프로그래밍/C++

(37)
lib와 dll 라이브러리(library) 라이브러리란? : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 것 1. 정적 라이브러리 (Static Link Library) : 실행파일 안에 라이브러리가 하나로 묶인다. 실행파일의 크기는 커지지만 실행파일만 있으면 어느 곳에서나 실행이 가능하다. 프로그램 실행 후 처리시간이 빠르다. .lib 파일의 형태로 생성된다. 2. 동적 라이브러리 (Dynamic Link Library) : 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조된다. 실행파일의 크기가 작다. .dll 파일의 형태로 생성된다. 물리 메모리에 한번 올라간 dll은 둘 이상의 프로세스가 각각 자신의 가상 메모리에 매핑해서 공유하는 구조를 지니 기 때문에 메모리 사용에 대한 효율성이 높다...
메모리 단편화 메모리 단편화 (Memory Fragmentation) : RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태 단편화가 생기는 이유 1. 내부 단편화(Internal Fragmentation) : 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황 ex) 메모장을 켰는데 OS가 4kb를 할당해주었다. 그런데 사실 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받아서 3kb만큼 내부 단편화가 생긴다. 2. 외부 단편화(External Fragmentation) : 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 되는데, 이 때 중간..
객체지향 개발 5대 원리 : SOLID S 단일 책임의 원칙 (SRP, Single Responsibility Principle) : 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중되어야 한다는 원칙 O 개방폐쇄의 원칙 (OCP, Open Close Principle) : 소프트웨어의 구성요소는 확장에는 열려있고 변경에는 닫혀있어야 한다는 원칙 L 리스코프 치환의 원칙 (The Liskov Substitution Principle) : 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다는 원칙 I 인터페이스 분리의 원칙 (Interface Segregation Principle) : 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙 D 의존성역전의 법칙 (D..
메모리 단편화 메모리 단편화 : RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태 1. 내부 단편화(Internal Fragmentation) : 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황 2. 외부 단편화(External Fragmentation) : 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 되는데, 이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황이다. 메모리 단편화 해결 방법 1. 페이징 기법 : 가상 메모리를 같은 크기의 블록으로 나눈 것. 연속적이지 않은 공간도 활용할 수..
LSB, MSB LSB (Least Significant Bit) : 하나의 데이터 형에서 가장 낮은 위치의 비트이다. 위치는 가장 값이 작은 비트인 2^0에 위치하고 있다. 해당 데이터 형에 들어있는 실제 숫자가 짝수인지 홀수인지 쉽게 알아낼 수 있다. 주로 난수발생 함수, 해시 함수, 검사합(CheckSum) 함수 등에서 많이 쓰인다. MSB (Most Significant Bit) : 어떠한 데이터 형의 최상위 비트를 의미한다. 데이터 형에 따라서 특징이 조금 나뉜다. Signed : 부호를 가지는 값 (양수, 음수를 구별한다) Unsigned : 부호를 가지지 않는다 (오직 양수) 1.. Unsigned char 데이터 형에서는 2^7이라는 값, 즉 가장 값이 큰 위치의 최상위 비트이다. 2.. Signed ch..
메모리의 구조 메모리의 구조는 총 4가지의 영역으로 나뉜다. 1. 코드(code) 영역 메모리의 코드 영역은 실행할 프로그램의 코드가 저장되는 영역이다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. 2. 데이터(data) 영역 메모리의 데이터 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 3. 스택(stack) 영역 메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다. 4. 힙(heap) 영역 메모리의 힙 영역은 사..
그래프(graph) 기초 그래프 : 정점의 모음과 이 정점을 잇는 간선의 모음과의 결합 정점의 집합을 V, 간선의 집합을 E, 그리고 그래프를 Q라고 했을 때 G = (V, E)이다. 간선으로 연결되어 있는 두 정점을 가리켜 서로 '인접(adjacent), 또는 이웃 관계에 있다고 말한다. 경로는 길이는 가지는데, 길이는 정점과 정점 사이에 있는 간선의 수로 정의된다. 간선이 방향성을 가지면 방향성 그래프, 방향성이 없으면 무방향성 그래프가 된다. 인접 행렬(Adjacency Matrix) : 정점끼리의 인접 관계를 나타내는 행렬 그래프의 정점의 수를 N이라고 한다면 N*N크기의 행렬을 만들어 행렬의 각 원소를 한 정점과 또 다른 정점이 인접해 있는 경우 1로 표시하고, 인접해 있지 않은 경우 0으로 표시한다. 장점 : 정점 간..
함수 호출 규약 함수 호출 규약 : 함수 호출 시 전달되는 인자의 순서나 함수가 종료될 때 함수의 스택을 정리하는 시점등을 약속한 것이다 stdcall, cdecl, thiscall, fastcall 등이 있다. 1. cdecl 스택으로 전달한 매개변수를 함수를 호출한 위치에서 정리하는 방식. 매개변수 전달을 위해 사용한 스택을 call 명령 다음에 정리한다. 2. stdcall 스택의 정리를 함수 내부에서 처리한다. 함수를 호출하는 위치에서는 함수를 호출만하고 스택정리를 하지 않는 방식이다. 3. fastcall 처음 n개의 매개변수를 스택 대신 레지스터로 전달하는 방식. 4.. thiscall 인스턴스의 주소가 기억된 후 호출되는 함수이다. 2 3 4 는 함수 호출 당한 쪽에서 스택 프레임을 정리한다