3-26(內存管理)

主要學習了內存管理和模塊
c++

內存管理主要包括內存分佈、內存管理方式;模塊主要是函數模板以及類模板。ide

1、內存管理:函數

一、內存分佈:學習

這裏須要注意一下全局變量和全局靜態變量之間的差異:全局變量和全局靜態變量的做用域都是全局的,可是其連接屬性不一樣,全局變量是全部課件可用,全局靜態變量只有當前文件可見。
指針

棧:主要存放非靜態變量、函數參數、返回值等等;而且棧是向下增長。總結也就是存放局部變量。對象

堆:主要存放動態開闢的內存。堆是向上增長。內存

數據區:也叫靜態區,主要存放全局數據和靜態變量。作用域

代碼區:主要存放常量。編譯器

二、內存管理方式it

c語言中主要運用malloc、realloc、calloc、free來管理動態內存管理;c++中引用了new和delete來管理內存。

二者之間的區別是;malloc等是函數,new是操做符;malloc等返回值爲void*,new返回值爲其變量類型指針;malloc參數爲字節數,new後i面跟的是申請對象的類型;malloc申請失敗返回的爲NULL;new申請失敗會拋異常,而且會調用構造函數。

new的實現原理:new申請空間主要借用operator new+構造函數來實現的,operator new是經過malloc+拋異常來實現的,說到底new申請空間也是malloc實現的。

2、,模板

模板原理:編譯器經過調用函數模板或類模板類型,實例化出對應的函數和類。

模板主要分爲函數模板和類模板

一、函數模板

函數模板指的是一個函數家族,該家族與類型無關,在使用時被初始化。(預處理階段就完成)

operator<class t1...class tn>//class能夠替換typename。

二、類模板

operator <class t1...class tn>

class Date{};

其中的Date只是類名,在這裏不表明其類型,類型爲Date<int>//int只是類型的一種,不必定就是此類型。

還有就是類模板的成員函數在類外定義時,須要增長模板參數列表。

相關文章
相關標籤/搜索