- 論壇徽章:
- 0
|
30可用積分
本帖最后由 toniz 于 2011-09-06 10:06 編輯
- #include <vector>
- #include <deque>
- #include <string>
- #include <iostream>
- using namespace std;
- int main(int argc, char *argv[]){
- string ok;
- int *pp1=new int[20000000];
- memset(pp1,0x00,20000000); //4898 * 4K
- delete [] pp1;
- cerr<<"After create memroy 1, please check the memory"<<endl;
- cin>>ok;
- vector<string > all_results;
- all_results.resize(1000000); //7827 * 4K
- cerr<<"After resize 10000000, please check the memory"<<endl;
- cin>>ok;
- all_results.clear();
- all_results.resize(10);
- int *pp2=new int[20000000];
- memset(pp2,0x00,20000000); //4898 * 4K
- delete [] pp2;
- cerr<<"After create memroy 2, please check the memory"<<endl;
- cin>>ok;
- }
- //12712* 4K
復(fù)制代碼 上面的代碼分三個(gè)部分申請(qǐng)內(nèi)存,我用SVMON 觀察,如果是每部都拆開(kāi),那么第一步和第三步都是使用4898個(gè)4K頁(yè)面,第二步使用7827個(gè)頁(yè)面。
但如果串起來(lái)一起運(yùn)行的話(huà),最后占用的內(nèi)存就是12712個(gè)頁(yè)面。
第一步的數(shù)組,內(nèi)存刪除后,可以被VECTOR容器使用。 也就是我用SVMON 觀察,第一步內(nèi)存使用4898個(gè)頁(yè)面,第二版用了7827個(gè)頁(yè)面。但VECTOR調(diào)用了RESIZE之后頁(yè)面就一直占用了。
就算我在下面加上 clear 和重新resize ,這部分內(nèi)存也沒(méi)被釋放。
請(qǐng)大牛指點(diǎn)一下。。謝謝 |
最佳答案
查看完整內(nèi)容
如果你想手工釋放vector里面的動(dòng)態(tài)內(nèi)存,可以這么做……{ vector temp_; temp.swap( all_results );}……
|