데이터 저장 STL:Queue에서 메모리 증가 원래 있는건가요?

winicon의 이미지

안녕하세요. 초보입니다.

A 프로그램에서는 데이터를 생성 및 처리 하여 B 프로그램으로 데이터를 보낼니다.
그런데 받는 B 프로그램에서 받아서 바로 처리가 되는데요.
A 프로그램에서는 데이터 생성하고 처리하는 부분이 느립니다.
그래서 큐와 쓰레드를 이용하기로 했습니다.

A프로그램에서 Main부분에서는 무수한 데이터를 계속해서 생성하여 큐에 저장합니다. 쓰레드에서는 큐에 저장된 데이터를 가져와 적절히 처리를 해주고 소켓를 이용하여 B프로그램으로 전송합니다.

위와같이 처리하는중.
큐의 push할때는 메모리가 생성되고, pop 할때는 메모리가 제거가 되지 않습니다. (포인터만 삭제하는것 같습니다. 원래 삭제되야 되는거 아닌가요?)

큐에 데이터를 push 할때 계속 해서 메모리가 생성이 발생한다면 시스템 메모리가 풀날것 같은데요.
어떻게 해야될지.. 메모리가 계속 증가 하게 되면 큐도 용도가 의심이 되네요.
참고로 데이터 동기화는 시켰습니다.

berise의 이미지

답은 아니요입니다.

메모리를 할당하는 루틴은 꽤나 비용이 비싸죠. 그래서 한번 할당한 메모리는 그대로 사용합니다.

큐 같은 경우 크기를 2배씩 늘일 겁니다. pop을 해서 삭제해도 늘어난 크기를 줄이지 않죠.

익명 사용자의 이미지

답변 고맙습니다.

그러면 메모리는 계속 증가되는 수 밖에 없는건가요?

이러면 큐를 사용할 필요가 없는건가요?

그럼. 큐를 사용하는 모든 프로그램은 데이터를 push한 만큼 프로그램 종료하기 전까지 메모리가 많이 할당되어 있어야 되는거 맞는건가요?

혹시 다른 좋은 방법은 있는지요?

^^수고하세요.

bejoy4him의 이미지

"berise" 님이 하신 말의 의미는 메모리를 해제해서 풀어버리지 않고 다음에 push할때 재 사용한다는 말입니다.

push만하고 pop하지 않으면 메모리가 고갈될수도 있는것은 어쩔수 없기에 여러가지 방법을 통해 피해가면 되는 것이고

push와 pop이 계속적으로 이뤄지는 일반적인 상황에서는 처음 시작 단계에서만 메모리가 증가하다가 일정수준에서 유지되게 될겁니다.

push -- 메모리 할당
pop -- 메모리 해제하지 않음
push -- 새로 메모리를 할당하지 않고 좀전에 pop했을 당시 해제 하지 않은 메모리 재사용..
pop -- 메모리 해제하지 않음

익명 사용자의 이미지

답변 고맙습니다.

처음 시작 단계에서만 메모리 증가 한다고 하는데요.

테스트 결과 끝까지 테스트는 안해 봤지만 메모리가 100메가 넘게 계속해서 증가됩니다. (아마 계속 했다면 시스템에 영향을 미칠만큼 메모리가 증가가 되겠지요)

그래서 pop가 실행이 안되는건가 해서 pop부분을 찍어봤는데 push, pop이 실행이 됩니다. 그러나 push가 많이 호출이 될지 pop이 많이 호출이 될지는 모릅니다.

push하는 속도는 초당 10KB 정도 일건 같습니다.

그럼 답변 부탁 드립니다. ^^

익명 사용자의 이미지

winicontt wrote:
답변 고맙습니다.

처음 시작 단계에서만 메모리 증가 한다고 하는데요.

테스트 결과 끝까지 테스트는 안해 봤지만 메모리가 100메가 넘게 계속해서 증가됩니다. (아마 계속 했다면 시스템에 영향을 미칠만큼 메모리가 증가가 되겠지요)

그래서 pop가 실행이 안되는건가 해서 pop부분을 찍어봤는데 push, pop이 실행이 됩니다. 그러나 push가 많이 호출이 될지 pop이 많이 호출이 될지는 모릅니다.

push하는 속도는 초당 10KB 정도 일건 같습니다.

그럼 답변 부탁 드립니다. ^^

구현에 따라 다르겠지만 보통 큐는 벡터 두개를 붙여서 만들 겁니다. 팝하는 속도보다 푸쉬하는 속도가 더 빨라서 점점 늘어나는 것일 확률도 높으니 한번 통계처리를 해보시길.

큐보다는 약간 느리겠지만 메모리 사용은 확실한 list를 사용하시는 방법도 있습니다. push대신 push_back, pop 대신 pop_front 같은걸 사용하시면서 메모리 사용량 추이를 다시 보시는 것도 방법이겠지요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.