STL에서 메모리 릭이 발생하는가?
글쓴이: purewell / 작성시간: 월, 2006/03/13 - 11:22오전
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; }
Forums:
소스가 이상하게 나오네...
소스가 이상하게 나와서 댓글 답니다.
처음에 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
음..
제가 생각하기로는 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.
동일한 mpatrol
동일한 mpatrol 소스라도
리눅스에서 컴팔한것과 bsd 에서 컴팔한것은 다르다고 할 수 있습니다.
일단 system call 은 플랫폼 마다 다르기 때문에
mpatrol 에서 그것을 사용할 것이고 그렇다면 같은 mpatrol 이라도
플랫폼에 따라 다르게 작동 할 수 있습니다.
또한 같은 컴파일러 라도 컴파일러 자체도 플랫폼 마다 다르게 구성되므로 컴파일러 문제가 아닐꺼라는 것도 장담 할 수 없습니다.
플랫폼에 상관없이 STL 은 동일한 것인가요?
STL 이 서로 다른거라서 내부 구현이 다를 가능성은 없나요?
gcc 버전이 서로 크게 다르다면, gcc 가 template 를 처리하는 방법이나 gcc 에 포함된 STL의 내부 구현이 변했을 가능성도 꽤 높을 듯 하네요.
댓글 달기