STL queue size

bueline의 이미지

STL에서 제공하는 queue를 이용한 프로그램을 개발하는데요
queue에 저장되는 메모리에 대해서 궁금한 점이 있어서요

1. queue에 저장되는 갯수는 제한이 없는건가요?

2. queue에 저장되는 데이터에 대한 용량은 시스템의 메모리에 따라서 계속 늘어나는건가요?

Client 에서 Data를 server가 받으면 read thread가 데이터를 받아서
queue에 저장하고 처리하는 thread가 데이터를 queue에서 빼서 처리하도록 프로그램을 만들려고 하는데요

스트레스 테스트로 데이터를 지속적으로 넣었을 때에 처리가 안되고 쌓여있다가 server가 그냥 죽는 경우가 발생하는데요
queue에 저장되는 size(갯수)와 용량을 확인하고 싶어서요
근데 stl에서 제공하는 함수에는 size를 알 수는 있지만 queue에 할당되어 있는 메모리 용량은
제공하는 함수가 없더군요

그래서 현재 size(갯수)를 확인해서 어느 정도의 데이터가 들어가면 받지 않도록 하고 있는데요
size와 용량을 확인해서 수동으로 메모리가 남는다면 늘려줄 수 있는지가 궁금합니다.
제가 수동으로 늘려주지 않아도 자동으로 queue가 데이터를 늘린다고 하는데요
확인을 어떻게 해야할지 궁금해서 질문을 남기게 되었습니다.

winner의 이미지

Memory 할당을 못하면 std::bad_alloc 예외가 발생할 겁니다.

chadr의 이미지

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.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.