표준 : : 벡터와 메모리 누수가 : 내가 지정할 수 있도록C++ 나는 다음과 같은 코드 ++ 벡터는 C로 <code>400mb</code> 파일을 읽고 있어요
#define RAMALLOC 20000000
struct worddata {
std::string name;
double ussage;
};
// ...
int counter = 0;
std::string dName;
double dUssage;
std::vector<worddata> primDataBank;
primDataBank.resize(RAMALLOC);
std::ifstream fIn(PATH + "output.dat");
while (fIn >> dName >> dUssage) {
primDataBank[counter].name = dName;
primDataBank[counter].ussage = dUssage;
counter++;
}
나는 20,000,000
항목의 크기로 벡터를 거주 한 그걸 반복하면 램 사용량이 증가해서는 안된다. 그러나 그것을 실행할 때 램 사용이 급격히 증가합니다.
Visual Studio 디버거 힙 스냅 샷에서 RAM이 processFrequencyData.exe!std::_Container_proxy
으로 점유되었음을 나타냅니다. 은 "할당 호출 스택은"지금처럼 보인다 :이 벡터에 뿌리를 가지고 나타납니다
.
램 사용량이 늘어나는 것을 어떻게 막을 수 있습니까?
감사합니다.
업데이트 : 경우에도 I이
내 램 사용량이 아직도 내가 값을 할당 while 루프의 코드 라인을 주석 때 빠르게 증가
while (fIn >> dName >> dUssage) {
//primDataBank[counter].name = dName;
//primDataBank[counter].ussage = dUssage;
counter++;
}
그러나 램 사용량이 증가하지 않는다 벡터 코드를 주석으로 처리하십시오 :
//std::vector<worddata> primDataBank;
//primDataBank.resize(RAMALLOC);
[mcve]를 제공 할 수 있습니까? – jaggedSpire
벡터의 크기를 조정 한 직후에 프로그램에서 일시 중지를 실행할 수 있습니까? 일시 중지를 누르면 더 이상 할당되지 않은 메모리가 표시됩니다. –
* 나는 벡터 크기가 20,000,000 개이므로, 루프에서 할당 할 때 숫양 사용량이 증가하지 않아야합니다. * 음 ... 그렇습니다. 귀하의 벡터는 처음에는 루프를 수행하는 동안 채우는 * 빈 문자열 *을 포함하며, 메모리를 차지합니다. – Borgleader