본문 바로가기

Development/C++11

바이너리로 읽어온 1바이트 4개를 4바이트 변수로 변환하기 SQL 컬럼 중 varbinary 같은 경우 RecordSet에서는 RFX_Binary로 불러온다. RFX_Binary(pFX, _T("[컬럼이름]"), m_arValue, 400); 2015. 10. 30.
[STL] vector, deque, list - 배열과 동일하게 연속적인 메모리 공간에 저장한다. 하여 원소들간의 포인터 연산이 가능하다.- 개별 원소들에 대해서 iterator 접근 외에도 position index를 통하여 접근이 가능하다.- 어떠한 순서로도 원소 순회가 가능하다. random access iterating이 가능하다.- 동적으로 할당이 가능한 dynamic array로 구현되어 있다.- 원소 끝부분에 삽입/삭제는 빠르나, 그 외 부분에서의 삽입/삭제는 deque, list에 비해 현저히 느리다.- 동적으로 컨테이너의 크기가 확장/축소가 가능하나, 확장시 전체 메모리 크기만큼 reallocating이 발생함으로 비용이 크다.- capacity를 확장시켜줄 수 있도록 적절한 크기의 reserve로 인한 메모리 확보가 중요하다. -.. 2014. 9. 22.
가상 소멸자의 사용 이유 - 클래스 내부에서 메모리를 동적할당하는 경우 소멸자에서 메모리 해제를 해주는데, 상속받은 부모의 소멸자가 가상 소멸자가 아닌 경우 객체 생성시 실제 객체의 클래스가 아닌, 생성된 포인터 자료형에 따라 소멸자가 호출된다. 결국 부모 클래스의 소멸자만 호출되고 메모리 누수가 발생한다. 하여 다형성을 지원할 수 있는 기본 클래스의 경우 소멸자를 가상함수로 지정해 놓아야한다. 예를 들면 Class A{A();~A();} Class B : public A{B();~B();} 이렇게 있을 경우 효율적인 객체 관리 (다형성) 를 위해 A* a = new B(); 이런식으로 B 객체를 A 클래스 포인터 자료형으로 만들어서 A* 객체들을 관리할 수 있다.하지만 이때 객체 a의 실제 객체는 B 클래스다.여기서 a가 파괴.. 2014. 9. 22.
메모리 단편화 - 메모리를 할당, 해제를 반복하다가 보면 할당되어있지 않은 메모리지만 조그맣게 나누어져 존재하는 구간이 생기게 된다.- 이렇게 나누어진 메모리 공간이 늘어나다보면 분명 총 메모리량은 부족하지 않은데, 메모리 할당이 불가능한 경우가 발생한다. 이것이 메모리 단편화이다. - 해결 방안 : 자주 동적할당을 하게 되는 메모리의 크기를 요소로 가지는 메모리 풀을 미리 만들어놓고, 그때그때마다 제공한다. 한번에 일정량을 할당받아 놓기 때문에 할당/해제를 반복하게 되는 경우가 사라진다. 2014. 9. 22.