STL에서 메모리 릭이 발생하는가?

purewell의 이미지

FreeBSD 5.2와 FedoraCore4.2test를 사용하였습니다.

Linux 2.6, gcc 4.1.0, mpatrol 2.7
- 처음에 잡은 1024만 해체하지 않았다고 보고함. (정상)

FreeBSD 5.2, gcc 3.3.3, mpatrol 2.7
- 처음에 잡은 메모리외에도 STL부분에서 메모리를 해체하지 않았다고 보고함.

STL에 문제가 있는건가요, 아니면 mpatrol이 오진한건가요?

#include <iostream>
#include <cstdlib>
#include <map>
#include <vector>
 
using namespace std;
 
int
main(int,char**)
{
        char* m((char*)malloc(1024));
        m[0] = 0x00;
        //free(m+1);
 
        vector<int> vi;
        for (size_t i(0), end(1000); i<end; i++) vi.push_back(i);
 
        map<int,int> mi;
        for (size_t i(0), end(1000); i<end; i++) mi.insert(map<int,int>::value_t                                                                             ype(i, i*2));
        return 0;
}

purewell의 이미지

소스가 이상하게 나와서 댓글 답니다.

처음에 malloc으로 1024바이트 잡고 일부러 해체하지 않습니다. (나중에 mpatrol이 정확히 보고함)

다음에 vector(int)를 이용하여 정수 인스턴트를 push_back합니다.
그리고 map(int,int)를 이용하여 정수 인스턴트를 insert합니다.

그리고 끝냅니다.

Linux의 mpatrol은 1024를 해체하지 않았다는 것만 표시합니다.
그런데 FreeBSD의 mpatrol은 그것 외에도 STL부분에도 해체하지 않은 메모리가 있다고 합니다.

http://www.sgi.com/tech/stl/FAQ.html
STL홈페이지에서는 몇몇 프로파일러가 오작동한다고 하긴 하는데 동일한 프로파일러에서 상이한 결과를 갖는 것이 이상합니다.

----------------------------------------
언제나 맑고픈 샘이가...
http://yubink.com - 강아지 필요하세요?
http://purewell.biz - 헙!!

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

chadr의 이미지

제가 생각하기로는 stl의 문제가 아니라 mpatrol의 오진이라고 생각이 듭니다.. 이런게 아닐까요..?

소멸자가 호출이 되면 stl 컨테이너는 자신의 데이터를 삭제합니다..
그런데 소멸자가 호출 되기 전에 mpatrol이 프로세스 종료로 인식하고 보고를 하는것일지도..

이렇게 하면 확실히 나타날것 같네요..

vector *pvector = new vector;

pvector->push_back(1);

delete pvector;

It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

ssehoony의 이미지

동일한 mpatrol 소스라도
리눅스에서 컴팔한것과 bsd 에서 컴팔한것은 다르다고 할 수 있습니다.

일단 system call 은 플랫폼 마다 다르기 때문에
mpatrol 에서 그것을 사용할 것이고 그렇다면 같은 mpatrol 이라도
플랫폼에 따라 다르게 작동 할 수 있습니다.

또한 같은 컴파일러 라도 컴파일러 자체도 플랫폼 마다 다르게 구성되므로 컴파일러 문제가 아닐꺼라는 것도 장담 할 수 없습니다.

플랫폼에 상관없이 STL 은 동일한 것인가요?
STL 이 서로 다른거라서 내부 구현이 다를 가능성은 없나요?
gcc 버전이 서로 크게 다르다면, gcc 가 template 를 처리하는 방법이나 gcc 에 포함된 STL의 내부 구현이 변했을 가능성도 꽤 높을 듯 하네요.

댓글 달기

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