sgi의 메모리 유출
제가 지금까지 사용했던 wIndows의 메모리 검사 lvd보다 훨씬 좋아요.
valgrind --tool=memcheck --show-reachable=yes --leak-check=yes ./tt
./tt는 테스트할 프로그램입니다.
네티즌의 예에 따르면
4
int main()
{
vector<int> v;
v.push_back(100);
v.push_back(200);
return 0;
}
valgrind로 메모리 유출이 있을 수 있지만 사실 이해할 수 있다. sgi의 실현에 따라 8byte의 메모리 블록을 신청한 것과 같다. v는 국부 변수이기 때문에 프로그램이 끝날 때 그 분석 함수를 호출할 수 있다. 이 메모리 블록을 sgi의 메모리 관리freelist에 돌려주어야 한다.freelist의 메모리를 방출하지 않았기 때문에 이 메모리는 방출되지 않은 것과 같습니다.그러나 현재 운영체제는 프로그램이 끝날 때 프로그램이 차지하는 메모리를 방출하기 때문에 이곳의 메모리 유출은 still reachable의 메모리일 뿐 definitely lost가 아니다.메모리 유출은 아니라고 할 수 있다.대상
int main()
{
int *pi; // use local pointer: real memory leak!!!
pi = new int[100];
return 0;
}
pi는 국부 변수이기 때문에 definitely lost입니다.sgi의freelist는static입니다. 아래 코드와 유사합니다
nt main()
{
static int *pi; // use static pointer: not a real memory leak!!!
pi = new int;
return 0;
}
이것은 still reachable입니다. 왜냐하면 pi는 정적, 전역적이기 때문입니다
그러나, 내가 linux에서 실험한 것은 바로 이 질문의 첫 번째 코드인,vector,valgrind가 메모리 유출을 표시하지 않았다는 것이다.내가 sgi에 따라 구현한 벡터는 스틸 리처블의 메모리가 유출되었다.still reachable는 메모리를 찾을 수 있고 방출할 수 있음을 나타냅니다.freelist를 통해 모든 메모리를 방출할 수 있기 때문입니다.
이로써 현재 사용되고 있는 g++4.1.2는 sgi의 stl이 아닐 수도 있고 후첩이 사용한 sgi가 아닐 수도 있다.
표준 stl을 제외한 sgi 용기, 예를 들어slist나hash맵
#include <ext/slist>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace __gnu_cxx;
디렉토리/usr/include/c++/4.1.2/ext/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.