c++ 기초적인거 하나 질문 할께요....

rockmgh의 이미지

vector<string> aa[10];
 
for(int i=0;i < 100000;i++){
aa[0].push_back("aaaaaaaaaaaa");
aa[1].push_back("aaaaaaaaaaaa");
}
aa[0].clear();

위에와 같이 백터에다가 스트링 넣고 클리어를 시켰는데

메모리 해제가 안되네요...

해제를 할려면 어떻게 해야 할까요? ㅜ

kukyakya의 이미지

http://ideone.com/DJXUvk

해보니까 잘 되는데, 해제가 안된다는게 어떤 의미이신가요?

============== 추가 ==============

메모리 할당 자체를 말씀하시는게 아닌가 싶은데, 이걸 의미하시는거라면

c++11 이전 표준이라면

// aa[0].clear(); 대신
aa[0] = std::vector<std::string>();

으로,

c++11 이후 표준이라면

aa[0].shrink_to_fit();

으로 메모리 할당을 해제하실 수 있습니다.

rockmgh의 이미지

리눅스에서 돌리고 있는데 top으로 메모리를 확인 해보면
상주 하고 있는 메모리가 줄지가않아서 제대로 해제된건지
궁금해서요

바로 메모리 사용량을 줄이고 싶거든요...

klara의 이미지

정상입니다.
할당/해제는 오버해드가 크기 때문에 해제된 메모리는 나중에 다시 할당이 요구될때를 위해서 바로 회수되지 않습니다.

kukyakya의 이미지

오류가 있어 수정합니다.

c++11 이전 표준이라면 http://stackoverflow.com/questions/1111078/reduce-the-capacity-of-an-stl-vector의 답변처럼

std::vector<T>(aa[0]).swap(aa[0]);

으로 c++11의 shrink_to_fit()을 흉내낼 수 있습니다.

rockmgh의 이미지

답변 감사합니다^^ 이따가 한번 해봐야겟네요 ^^