C 巧用swap收縮記憶體空間

2021-10-17 04:18:20 字數 1927 閱讀 1827

**

void

test03()

cout <<

"v.容量為:"

<

capacity()

<

cout <<

"v的大小為:"

<

size()

<

v.resize(3

);//重新指定大小

cout <<

"v.容量為:"

<

capacity()

<

cout <<

"v的大小為:"

<

size()

<

//巧用swap收縮記憶體

//**解釋:vector(v)匿名物件 通過拷貝建構函式

//拷貝了乙個新的物件(新的物件大小和容量均為拷貝物件有內容的部分即capcity=size)

//統計swap(v)交換函式 v指向匿名物件實際內容 而匿名物件指向最初內容,之後後 匿名物件所指**

//這樣就收縮了記憶體

vector<

int>

(v).

swap

(v);

cout <<

"v.容量為:"

<

capacity()

<

cout <<

"v的大小為:"

<

size()

<

}

執行效果為:

程式說明:

1)最初v所指向的是乙個容量capacity>>10000(16384),大小size==10000的陣列,當該陣列進行大小修改後,size==3,而容量不變,capacity>>10000(16384)

這就造成了記憶體資源的浪費,在實際開發中難以忍受。

2)解決方法通常是使用swap(vector&),進行記憶體空間的收縮:

首先,swap語句的通常用法為:

v1.swap(v2)

;

程式交換了v1,v2所指的內容,即最初v1指向陣列1,v2指向陣列2;交換後v1指向陣列2,v2指向陣列1。

因此該段程式中,使用以下語句進行記憶體收縮:

vector

(v).swap(v)

1)首先使用vector的拷貝建構函式宣告了乙個匿名物件(暫時命名為x),x指向陣列的大小size和容量capacity均等於v物件指向陣列的大小size,即x.size() = x.capacity() = v.size()=3.

2)然後通過使用swap函式,將x所指小容量陣列與v所指大容量陣列交換,變為x指向大容量陣列、v指向小容量陣列。

3)最後由於匿名函式在該語句執行結束後,自動**的特性,達到銷毀大容量陣列的目的。

這就是巧用swap收縮記憶體空間。

C 記憶體空間

乙個c 程式編譯後占用的記憶體分為如下幾個部分 棧 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值。在乙個程序中,位於使用者虛擬位址空間頂部的是使用者棧,編譯器用它來實現函式的呼叫。堆 由程式設計師分配和釋放,若程式設計師不釋放,則程式結束時被os 存放由new,malloc分配的記憶體,可...

c 記憶體空間

題目 若char是一位元組,int是4位元組,指標型別是4位元組,如下 class ctest virtual void mem fun private char m chdata int m ndata static char s chdata char ctest s chdata 0 靜態成員...

c 記憶體空間

乙個可執行程式指令碼可以分為3個基本段,段,資料段,bss段 unix下可以使用size命令檢視可執行檔案的段大小資訊,size a.out header text 資料data bss 2 資料段.data 存放編譯階段就能確定的資料,可讀寫 3 段.text 段通常指用來存放執行d 的一塊儲存區...