C++의 창시자 및 설계자인 Bjarne Stroustrup(발음하기도 힘들다)도 string에 대한 구현은 갖가지가 될 수 있다고 말할 정도로, string은 다른 STL보다 정말 구현방법에 많은 차이가 보인다. 이렇기 때문에 string에 대한 상세한 사항을 알 필요는 없지만, 왜 알 필요가 없는지 알 필요는 있다고 필자는 이야기한다. string의 문자열 값은 참조 카운팅이 될 수도 있고, 아닐 수도 있다. 기본적으로 많은 라이브러리에선 하고 있다, 또한 이 기능을 막는 방법이 매크로 단계에서 제공하고 있다.string 객체의 크기는 포인터 크기의 1~7배까지 다양하다.string에 문자열을 할당할 때 0~2번 메모리 할당 할 수 있다.둘 이상의 string 객체가 문자열의 크기나 용량 정보를 가지..
stl 검색 결과
이 이야기에 앞서 vector 와 string 에 대해서 이야기를 하자면, vector 와 string 은 실제로 배열처럼 사용 할수가 있다. 이런 배열 처럼 사용 할수 있는 점 때문에. vector와 string으로 만든 메모리는 실제로 배열처럼 차례대로 메모리에 올라간다. 여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐? 배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다. 그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐..
여기서 중요한것은 "동적으로 할당한 배열 보다 좋다는 것이다." 이다. new 로 인하여 생성되는 메모리에 대해서는 사용자는 몇가지 염두를 해 두어야 한다. 하나. 메모리를 해체 해야 한다. 하나, delete도 메모리 타입에 맞추어서 해줘야 한다. 하나, delete는 new 와 쌍을 맞추어야 한다. 이런 염두를 없애기 위해선 vector 을 사용하면 된다고 말을 해준다. (그렇다고 동적 배열 메모리 할당 기능을 나쁘게 보는것은 아닐것이다.) string에 대해서도 이야기를 해 주었는데, string 은 내부에서 참조 카운팅이 되고 있을 수 있다. 이 참조 카운팅 때문에, 성능에 아주 좋은 효과를 보지만, 멀티 쓰레딩에선 독이 될수 있는 부분이라고 지적한다. 이럴때는 3가지 방법을 제시했는데, 하나, ..
표준 STL에서 쓰레드 안전성을 갖춘 컨테이너가 없다는 것에 놀라지는 않는다. 나도 지금에서야 쓰레드 개념을 잡았으니.. 할말 없지 뭐, 지금은 다중 쓰레드 기반 프로그램이 많기 때문에, 이번 항목은 STL 컨테이너가 다중 쓰레딩 지원을 할수 있도록 요령을 가르쳐 준다. STL 컨테이너의 다중 쓰레드 지원 방법은 SGI(실리콘 그래픽스) 재정한 방식이 가장 좋다고 하고, 필자는 이중 두가지 핵심을 뽑아 말해 준다. 여러 쓰레드에서 읽는 것은 안전해야 한다.여러 쓰레드에서 다른 컨테이너에 쓰는 것은 안전해야 한다. 말처럼 쉽지만은 않기 때문에, 세부적인 기능(어떻게 해야 하는가?)에 어떤것을 두어야 할지 필자는 설명한다. 컨테이너의 멤버 함수를 호출하는 시간 동안 컨테이너에 락 걸기컨테이너가 만들어 내어 ..
보통의 경우 메모리 할당은 new 나 malloc 으로 처리 한다. 하지만 좀더 상세하게 작동하고자 할 경우 할당자를 사용 한다고 하니, ... 일단 짚고 넘어가야겠다. 할당자(allocator)를 찾아봐도, 1. operator new 나 operator new[] 와 마찬가지로 메모리 할당과 해체를 해 주는 객체이다 2. 하지만 그 사용 방법이 전혀 다르다 3. 할당자에서 정의된 메모리의 모델의 포인터와 참조자에 typedef를 제공해야 한다. 4. 같은 타입의 할당자 객체는 동등하고, 상등 비교를 수행 한다. (같은 타입의 할당자는 똑같다는 말로 해석 됨) 5. 할당자는 상태를 갖지 않는다. (비정적(non-static) 데이터 멤버를 전혀 가지지 않는다.) 5번 사항으로 인하여, STL은 두 개의..
최근댓글