C API 들 중에 배열을 받아서 처리 하는 함수들이 많이 있다. 이 함수들에 vector와 string이 들어 갈수가 있는데, 왜 이 두 STL 만 들어가냐하면, ... 이 두 STL은 배열을 기반으로 만들어진 STL이기에, 실제로 메모리가 연속되어서 할당된 것이다. 예를 들어 std::vector v; 가 있고, 10개의 요소가 있다면, &v[0]이 그 첫번째 주소이고 size(); 함수 호출에 리턴되는 값만큼 연속적으로 쌓여 있다는 이야기이다. 여기서 주의 해야 할 것은 &v[0], size()를 넘겨서 대개는 잘 작동 하는데, 그 이유는 이 배열을 루틴 내에서 크기변경을 하지 않기 때문이다. 반대로 잘 작동 안하는것은 v의 크기가 루틴내에서 변경되기 때문이다. 또한 v에 아무 인자도 없다고 하더라..
분류 전체보기 검색 결과
이렇게 모모 하지 말자, 모모 하자. 이런식으로 나온 제목을 보고 있노라면, 마음이 편해진다. 생각할 필요 없이 그대로 믿고 따르면 되기 때문이다.(.. 물론 알아야 할 필요가 없다는것은 아니지만. ㅋ) 왜냐하면 함수의 디폴트 매개변수는 정적 바인딩되고, 상속되는 함수는 동적으로 바인딩 되기 때문이다. .. 이렇게만 정리하면 편하겠지만, 정적 바인딩, 동적 바인딩에 대해서 알아야 더 편한 세상에 살수 있어, 정리해 둔다. 정적 바인딩이란, 확실한 것들을 미리 묶는다라는 개념으로. 미리 묶었기 때문에 예측하여 캐싱할수가 있어, 더 빠르다. 공식적으론 선행 바인딩(Early Binding)이라 부른다.(이 말이 개인적으로 더 좋다고 보는데..) 동적 바인딩이란, 유동적이기에 미리 묶을수 없지만, 동적으로 다..
C++의 창시자 및 설계자인 Bjarne Stroustrup(발음하기도 힘들다)도 string에 대한 구현은 갖가지가 될 수 있다고 말할 정도로, string은 다른 STL보다 정말 구현방법에 많은 차이가 보인다. 이렇기 때문에 string에 대한 상세한 사항을 알 필요는 없지만, 왜 알 필요가 없는지 알 필요는 있다고 필자는 이야기한다. string의 문자열 값은 참조 카운팅이 될 수도 있고, 아닐 수도 있다. 기본적으로 많은 라이브러리에선 하고 있다, 또한 이 기능을 막는 방법이 매크로 단계에서 제공하고 있다.string 객체의 크기는 포인터 크기의 1~7배까지 다양하다.string에 문자열을 할당할 때 0~2번 메모리 할당 할 수 있다.둘 이상의 string 객체가 문자열의 크기나 용량 정보를 가지..
이 이야기에 앞서 vector 와 string 에 대해서 이야기를 하자면, vector 와 string 은 실제로 배열처럼 사용 할수가 있다. 이런 배열 처럼 사용 할수 있는 점 때문에. vector와 string으로 만든 메모리는 실제로 배열처럼 차례대로 메모리에 올라간다. 여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐? 배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다. 그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐..
여기서 중요한것은 "동적으로 할당한 배열 보다 좋다는 것이다." 이다. new 로 인하여 생성되는 메모리에 대해서는 사용자는 몇가지 염두를 해 두어야 한다. 하나. 메모리를 해체 해야 한다. 하나, delete도 메모리 타입에 맞추어서 해줘야 한다. 하나, delete는 new 와 쌍을 맞추어야 한다. 이런 염두를 없애기 위해선 vector 을 사용하면 된다고 말을 해준다. (그렇다고 동적 배열 메모리 할당 기능을 나쁘게 보는것은 아닐것이다.) string에 대해서도 이야기를 해 주었는데, string 은 내부에서 참조 카운팅이 되고 있을 수 있다. 이 참조 카운팅 때문에, 성능에 아주 좋은 효과를 보지만, 멀티 쓰레딩에선 독이 될수 있는 부분이라고 지적한다. 이럴때는 3가지 방법을 제시했는데, 하나, ..
표준 STL에서 쓰레드 안전성을 갖춘 컨테이너가 없다는 것에 놀라지는 않는다. 나도 지금에서야 쓰레드 개념을 잡았으니.. 할말 없지 뭐, 지금은 다중 쓰레드 기반 프로그램이 많기 때문에, 이번 항목은 STL 컨테이너가 다중 쓰레딩 지원을 할수 있도록 요령을 가르쳐 준다. STL 컨테이너의 다중 쓰레드 지원 방법은 SGI(실리콘 그래픽스) 재정한 방식이 가장 좋다고 하고, 필자는 이중 두가지 핵심을 뽑아 말해 준다. 여러 쓰레드에서 읽는 것은 안전해야 한다.여러 쓰레드에서 다른 컨테이너에 쓰는 것은 안전해야 한다. 말처럼 쉽지만은 않기 때문에, 세부적인 기능(어떻게 해야 하는가?)에 어떤것을 두어야 할지 필자는 설명한다. 컨테이너의 멤버 함수를 호출하는 시간 동안 컨테이너에 락 걸기컨테이너가 만들어 내어 ..
최근댓글