先介紹下泛型程式設計
顧名思義,泛型程式設計就是支援多種型別的通用**,說多種其實不嚴謹,應該是與型別無關的通用**。目的是為了提高**的復用率。
2.函式模板:
先騎自行車:
template
<
typename t>
void
swapty
(t &a,t &b)
void
main()
結果:
函式模板代表了乙個函式家族,該函式模板和型別無關,在使用的時候才被引數化,編譯器會根據使用者傳入的引數去自動推演生成相應的函式。
函式模板還可以定義任意多個不同的型別引數,但是對於多引數函式模板:
- 編譯器是無法自動推導返回值型別的
- 可以從左向右部分指定型別引數
看**:
template
<
typename t1,
typename t2,
typename t3>
t1 add
(t2 a, t3 b)
void
main()
結果:
2. 當函式模板遇上函式過載
函式模板跟普通函式一樣,也可以被過載
- c++編譯器優先考慮普通函式
- 如果函式模板可以產生乙個更好的匹配,那麼就選擇函式模板
- 也可以通過空模板實參列表<>限定編譯器只匹配函式模板
template
<
typename t>
void
fun(t a)
template
<
typename t1,
typename t2>
void
fun(t1 a, t2 b)
void
fun(
int a,
float b)
void
main()
結果:
3.類模板
同理,先騎自行車
template
<
typename t>
class
complex
//運算子過載
complex
operator
+(complex &c)
void
showmsg()
private
: t a;
t b;};
void
main()
結果:
其實有了函式模板的基礎、類模板就相對好理解了,都是將具體型別模糊化。
這僅僅是基礎,以後再深入,僅僅是為了讓你能夠看懂後面的文章而已。
linux記憶體管理 之 slab分配器
1 頁面分配器是頁面級的記憶體分配工具,能分配2的order次冪的連續物理記憶體。linux在頁面級記憶體分配的基礎上,開發了小記憶體分配方案 slab slob slub。後兩者分別針對大型系統和嵌入式系統。2 slab分配器的思想 先利用頁面分配器分配出單個或者一組連續的物理頁面,然後在此基礎上...
C 記憶體管理之分配器雛形
c 中每次malloc會帶有除錯頭和尾,記錄當前區塊大小的頭和尾。因此我們盡可能需要減少malloc的呼叫次數,又因為new底層也是malloc實現的,因此,也需要減少其呼叫次數。我們可以通過設計記憶體池來管理乙個記憶體鍊錶,每次分配較多的數量,並依次進行取用。下面是 實現 實現原理是內嵌指標的操作...
Linux記憶體管理slab分配器
在solaris 2.4以前,linux核心採用基於夥伴演算法實現的分割槽頁框分配器適合大塊記憶體的請求。夥伴將空閒頁面分為m個組,第1組儲存2 0個單位的記憶體塊,第2組儲存2 1個單位的記憶體塊,第3組儲存2 2個單位的記憶體塊,第4組儲存2 3個單位的記憶體塊,以此類推.直到m組.但是夥伴演算...