c 相關基礎

2021-08-09 22:17:14 字數 594 閱讀 9035

stl內存在哪:vector map set等標準容器預設都是使用記憶體分配器模板類allocator管理記憶體的分配、釋放。allocator呼叫new/delete操作符進行批量的記憶體分配。所以在堆。

首先我們知道c++中主要的記憶體儲存分配方式有:

棧,堆,全域性/靜態儲存區,常量儲存區,自由儲存區

棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。在乙個程序中,位於使用者虛擬位址空間頂部的是使用者棧,編譯器用它來實現函式的呼叫。

堆:就是那些由 new 分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個 new 就要對應乙個 delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。堆可以動態地擴充套件和收縮。

自由儲存區:就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

常量儲存區:這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。

全域性/靜態儲存區:全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

c 相關基礎學習

1.剖析c 是如何實現過載的?在c 中,同名的函式可以完成不同引數列表,可同可不同的返回值的函式。例如 int add int a,int b double add double a,double b int main 同名函式可有三種情況進行過載 1.引數型別不同 2.引數的個數不同 3.以上兩點...

C 相關的基礎題

ifndef incvxworksh define incvxworksh ifdef cplusplus extern c endif endif incvxworksh 解答 標頭檔案中的編譯巨集 ifndef incvxworksh define incvxworksh endif 的作用是防...

C 相關基礎知識

1 記憶體空間分配 2 c 字元陣列 0 問題 從c繼承而來c風格字串 c style character string 它不是一種型別,而是為了表達和使用字串而形成的一種約定俗成的寫法。按此習慣書寫的字串存放再字元陣列中並以空字元結束 null terminated 以空字元結束的意思是再字串最後...