STL記憶體處理工具

2021-07-14 16:58:02 字數 3138 閱讀 3845

stl定義了5個全域性函式,作用在未初始化的空間上。

1. construct()

2. destroy()

3. uninitialized_copy()

4. uninitialized_fill()

5. uninitialized_fill_n()

見sgi記憶體管理

這個函式的作用是把[first, last)範圍的物件複製到result中。如果沒有初始化,則使用copy constructor,複製物件。

inline forwarditerator

uninitialized_copy(inputiterator first, inputiterator last,

forwarditerator result)

判斷是否為pod(plain old data),為標量型別或者傳統的c struct型別.

inline forwarditerator

__uninitialized_copy(inputiterator first, inputiterator last,

forwarditerator result, t*)

pod類型別就是指class、struct、union,且不具有使用者定義的建構函式、析構函式、拷貝運算元、賦值運算元;不具有繼承關係,因此沒有基類;不具有虛函式,所以就沒有虛表;非靜態資料成員沒有私有或保護屬性的、沒有引用型別的、沒有非pod類型別的(即巢狀類都必須是pod)、沒有指標到成員型別的(因為這個型別內含了this指標)。簡單的說直接的記憶體複製操作對pod型別沒有影響,比如用memset進行初始化,但這對於非pod型別是不可行的,比如存在虛函式的情況下。對於pod型別我們採用最有效率的複製手法,而對於no-pod型別的採取最安全的做法。

uninitialized_copy()使記憶體的配置與物件的構造分離,針對不同的物件有不同的構造方法,最終呼叫的這兩個建構函式為

// valid if copy construction is equivalent to assignment, and if the

// destructor is trivial.

template

inline forwarditerator

__uninitialized_copy_aux(inputiterator first, inputiterator last,

forwarditerator result,

__true_type)

template

forwarditerator

__uninitialized_copy_aux(inputiterator first, inputiterator last,

forwarditerator result,

__false_type)

__stl_unwind(destroy(result, cur));

}//一下針對char*和wchar_t*使用更高效的memmove()

inline

char* uninitialized_copy(const

char* first, const

char* last,

char* result)

inline

wchar_t* uninitialized_copy(const

wchar_t* first, const

wchar_t* last,

wchar_t* result)

uninitialized_fill也將記憶體配置與物件的構造分離,對[first, last)範圍的迭代器i,呼叫construct(&*i, x);

const t& x)

萃取出value_type

template

inline

void __uninitialized_fill(forwarditerator first, forwarditerator last,

const t& x, t1*)

對不同的情況,有不同的處理方式

template

inline

void

__uninitialized_fill_aux(forwarditerator first, forwarditerator last,

const t& x, __true_type)

template

void

__uninitialized_fill_aux(forwarditerator first, forwarditerator last,

const t& x, __false_type)

__stl_unwind(destroy(first, cur));

}

uninitialized_fill_n在[first, first+n)上填充x

inline forwarditerator uninitialized_fill_n(forwarditerator first, size n,

const t& x)

然後萃取value_type

template

inline forwarditerator __uninitialized_fill_n(forwarditerator first, size n,

const t& x, t1*)

對具體問題,有不同的處理

template

inline forwarditerator

__uninitialized_fill_n_aux(forwarditerator first, size n,

const t& x, __true_type)

template

forwarditerator

__uninitialized_fill_n_aux(forwarditerator first, size n,

const t& x, __false_type)

__stl_unwind(destroy(first, cur));

}

STL 記憶體基本處理工具

stl定義有五個全域性函式,作用於未初始化空間上,這樣的功能對於容器的實現很有幫助。前兩個函式是用於構造的construct 和用於析構的destroy 另三個函式是uninitialized copy uninitialized fill uninitialized fill n,分別對應於高層次...

shell檔案處理工具

vim etc resolve.conf 檢視dns 6.shell指令碼命令 1.diff diff file file 比較兩個檔案的不同 c 顯示周圍的行 u 按照一格式統一輸出生成補丁 r 比較兩個目錄中檔案的不同 pattch file file.path 打補丁 b 備份原檔案 2.gr...

文字的處理工具

在linux中我們經常編輯修改檔案,即由ascii,unicode 或其它編碼的純文字的檔案。vi是visual editor,文字編輯器,是linux 必備工具之一,功能強大,學習曲線較陡峭,學習難度大。vimvisual editor improved 和vi 使用方法一致,但功能更為強大,不是...