C API 들 중에 배열을 받아서 처리 하는 함수들이 많이 있다. 이 함수들에 vector와 string이 들어 갈수가 있는데, 왜 이 두 STL 만 들어가냐하면, ... 이 두 STL은 배열을 기반으로 만들어진 STL이기에, 실제로 메모리가 연속되어서 할당된 것이다. 예를 들어 std::vector v; 가 있고, 10개의 요소가 있다면, &v[0]이 그 첫번째 주소이고 size(); 함수 호출에 리턴되는 값만큼 연속적으로 쌓여 있다는 이야기이다. 여기서 주의 해야 할 것은 &v[0], size()를 넘겨서 대개는 잘 작동 하는데, 그 이유는 이 배열을 루틴 내에서 크기변경을 하지 않기 때문이다. 반대로 잘 작동 안하는것은 v의 크기가 루틴내에서 변경되기 때문이다. 또한 v에 아무 인자도 없다고 하더라..
vector 검색 결과
이 이야기에 앞서 vector 와 string 에 대해서 이야기를 하자면, vector 와 string 은 실제로 배열처럼 사용 할수가 있다. 이런 배열 처럼 사용 할수 있는 점 때문에. vector와 string으로 만든 메모리는 실제로 배열처럼 차례대로 메모리에 올라간다. 여기서 잠깐, 그렇다면 어떻게 동적으로들어 가는 메모리가 배열처럼 차례대로 메모리에 올라가느냐? 배열 처럼 차례대로 메모리에 올리기 위해서 vector 와 string 은 미리 메모리 공간을 기본값만큼 할당 받아 놓고, 메모리가 새롭게 추가 되면, 이 공간에 넣어 둠으로써 배열처럼 작동시키는 것이다. 이 할당 받아 놓은것을 최대 용량으로 표현하겠다. 그렇다면 어떻게 vector 와 string에 들어가는 원소의 갯수에 제한이 없느냐..
여기서 중요한것은 "동적으로 할당한 배열 보다 좋다는 것이다." 이다. new 로 인하여 생성되는 메모리에 대해서는 사용자는 몇가지 염두를 해 두어야 한다. 하나. 메모리를 해체 해야 한다. 하나, delete도 메모리 타입에 맞추어서 해줘야 한다. 하나, delete는 new 와 쌍을 맞추어야 한다. 이런 염두를 없애기 위해선 vector 을 사용하면 된다고 말을 해준다. (그렇다고 동적 배열 메모리 할당 기능을 나쁘게 보는것은 아닐것이다.) string에 대해서도 이야기를 해 주었는데, string 은 내부에서 참조 카운팅이 되고 있을 수 있다. 이 참조 카운팅 때문에, 성능에 아주 좋은 효과를 보지만, 멀티 쓰레딩에선 독이 될수 있는 부분이라고 지적한다. 이럴때는 3가지 방법을 제시했는데, 하나, ..
최근댓글