[다시 질문] STL:Queue에서 push하면 계속되는 메모리 증가 원

winicon의 이미지

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

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

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

위와같이 처리하는중.
큐의 push할때는 메모리가 생성되고, pop 할때는 메모리를 풀어주고 push 할때 재사용된다고 하는데요. 제대로 사용이 안되는거 같습니다.(push,pop 하는 속도가 빨라서 그런가 해서 테스트 해봤는데, 결과는 차이가 없었습니다.)

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

처음에만 메모리가 증가 되고 나중에는 메모리가 증가가 없겠지 하고 5분 동안 체크해봤는데요. 그것도 별로 소용이 없네요. 메모리 증가율이 점점 감소되지는 않았습니다.
200메가 정도에서 그만 두었습니다. 좀더 두었으면 아마 1기가까지 생성이 될것 같네요.

제가 잘 몰라서 그런거겠지만, 현재는 이놈의 큐가 왜 있는건지.
리스트도 해 봤는데요. 똑같은 결과 나왔습니다.

돌겠습니다. 어떻게 해야 될지..? 흐흐흐흐
그냥 쓰레드 안쓰고 생성 및 처리 되는 코드를 최적화 하는 방법밖에 없는건가요?

==========================================

익명 사용자의 이미지

#include <queue>
#include <iostream>

void main()
{
        queue<int> q;

        while ( true )
        {
                q.push(1);
                q.pop();
        }
}

테스트 결과 메모리 사용량이 늘어나진 않는군요..
레드햇 7.3 gcc 2.95.3 버전에서 테스트했습니다.
다른부분에 메모리릭이 있는게 아닌지 확인해보세요.

winicon wrote:
안녕하세요. 초보입니다.

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

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

위와같이 처리하는중.
큐의 push할때는 메모리가 생성되고, pop 할때는 메모리를 풀어주고 push 할때 재사용된다고 하는데요. 제대로 사용이 안되는거 같습니다.(push,pop 하는 속도가 빨라서 그런가 해서 테스트 해봤는데, 결과는 차이가 없었습니다.)

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

처음에만 메모리가 증가 되고 나중에는 메모리가 증가가 없겠지 하고 5분 동안 체크해봤는데요. 그것도 별로 소용이 없네요. 메모리 증가율이 점점 감소되지는 않았습니다.
200메가 정도에서 그만 두었습니다. 좀더 두었으면 아마 1기가까지 생성이 될것 같네요.

제가 잘 몰라서 그런거겠지만, 현재는 이놈의 큐가 왜 있는건지.
리스트도 해 봤는데요. 똑같은 결과 나왔습니다.

돌겠습니다. 어떻게 해야 될지..? 흐흐흐흐
그냥 쓰레드 안쓰고 생성 및 처리 되는 코드를 최적화 하는 방법밖에 없는건가요?

==========================================

익명 사용자의 이미지

답변 잘 받았습니다. ^^

메모리를 동적으로 할당하는 부분은 없거든요.

단순하게 본다면 아래 코드와 같이 사용합니다.
for(int x=0; x<1000; x++)
{
q.push(i);
i = q.front();
q.pop();
}

뭐가 문제인지.. 흐흐흐.. 그럼 즐거운 주말 보내세요.^^

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.