STL queue size
글쓴이: bueline / 작성시간: 화, 2011/03/15 - 3:25오후
STL에서 제공하는 queue를 이용한 프로그램을 개발하는데요
queue에 저장되는 메모리에 대해서 궁금한 점이 있어서요
1. queue에 저장되는 갯수는 제한이 없는건가요?
2. queue에 저장되는 데이터에 대한 용량은 시스템의 메모리에 따라서 계속 늘어나는건가요?
Client 에서 Data를 server가 받으면 read thread가 데이터를 받아서
queue에 저장하고 처리하는 thread가 데이터를 queue에서 빼서 처리하도록 프로그램을 만들려고 하는데요
스트레스 테스트로 데이터를 지속적으로 넣었을 때에 처리가 안되고 쌓여있다가 server가 그냥 죽는 경우가 발생하는데요
queue에 저장되는 size(갯수)와 용량을 확인하고 싶어서요
근데 stl에서 제공하는 함수에는 size를 알 수는 있지만 queue에 할당되어 있는 메모리 용량은
제공하는 함수가 없더군요
그래서 현재 size(갯수)를 확인해서 어느 정도의 데이터가 들어가면 받지 않도록 하고 있는데요
size와 용량을 확인해서 수동으로 메모리가 남는다면 늘려줄 수 있는지가 궁금합니다.
제가 수동으로 늘려주지 않아도 자동으로 queue가 데이터를 늘린다고 하는데요
확인을 어떻게 해야할지 궁금해서 질문을 남기게 되었습니다.
Forums:
제한 없습니다.
Memory 할당을 못하면 std::bad_alloc 예외가 발생할 겁니다.
1. 엄밀히 말하자면 queue에 저장되는 갯수는
1. 엄밀히 말하자면 queue에 저장되는 갯수는 제한이 있습니다. max_size 함수를 이용해서 알아올 수 있습니다.
하지만 충분히 개수가 많으므로 고려하실 필요는 없습니다. 만약에 넘어선다면 시스템에서 감당할 수 있는
처리량이 아니므로 적절히 제한을 하셔야합니다. 또한 운영체제의 사정에 따라서 max_size를 넘어서지 않았는데
메모리 할당이 실패할 수도 있습니다. 그럴땐 std::bad_alloc가 발생합니다.
2. queue가 차지하는 메모리는 당연히 저장되어있는 데이터의 용량에 따라서 가변입니다.
queue는 템플릿이므로 생성시 입력한 데이터 타입의 크기와 개수를 곱하시면 차지하는 메모리량이 나옵니다.
sizeof(데이터타입)*queue.size()
stl에 있는 컨테이너들은 필요시 자동으로 크기를 늘려가며 메모리를 할당합니다.
따라서 수동으로 하실 필요도 없고 하실수도 없습니다.
다른 컨테이너는 capacity라는 함수를 통해서 확인이 가능한데 queue는 capacity가 없네요.
쌓여가는 queue를 처리하지 못하여 오버플로가 난다면 흐름제어를 하시거나 처리하는 쪽을 최적화하여
빠르게 처리하시는 방법밖에 없는듯 합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기