記憶體分配有三種方式:
一:從全域性儲存區域分配:這時內存在程式編譯階段就已經分配好,該內存在程式執行的整個週期都有效,如:全域性變數、static靜態變數。
二:從棧區分配:在執行函式的時候,函式中的區域性變數的儲存單元都可以從棧中分配,函式執行結束後這些儲存單元都會被自動釋放,實現從棧中分配儲存單元運算操作內置於處理器的指令集中,效率很高
但是分配的記憶體容量有限。
三:從堆中分配:也稱為動態記憶體分配,在程式執行期間,可以使用malloc和
new申請任意數量的記憶體單元,由程式設計師決定在什麼時候使用
free
和delete
釋放記憶體。
(1).佇列先進先出,棧先進後出。
(2). 對插入和刪除操作的"限定
"。棧是限定只能在表的一端進行插入和刪除操作的線性表。
佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。
(3).遍歷資料速度不同。棧只能從頭部取資料,也就最先放入的需要遍歷整個棧最後才能取出來,而且在遍歷資料的時候還得為資料開闢臨時空間,保持資料在遍歷前的一致性。佇列則不同,它基於位址指標進行遍歷,而且可以從頭或尾部開始遍歷,但不能同時遍歷,無需開闢臨時空間,因為在遍歷的過程中不影像資料結構,速度要快的多
所謂定義就是(編譯器)建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。
宣告有2重含義:
(1) 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的**用到變數或者物件是在別的地方定義的。宣告可以出現多次。
(2) 告訴編譯器,這個名字已經被預定了,別的地方再也不能用它來作為變數名或物件名。
定義和宣告的最重要區別就是:
定義建立物件並為這個物件分配記憶體,宣告不分配記憶體。
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,靈活的位操作可以有效地提高程式執行的效率。運用位操作需要注意的是,因為cpu
的不同而產生的問題。比如說,在
pc上用這招編寫的程式,並在
pc上除錯通過,在移植到乙個
16位機平台上的時候,可能會產生**隱患。所以只有在一定技術高階的基礎下才可以使用這招。
作用域:全域性變數的生存週期為整個工程檔案,而區域性變數在函式結束後就被釋放
空間分配:未初始化的全域性變數存放在使用者空間的.bss資料段,初始化的全域性變數存放在靜態資料區,區域性變數存放在棧空間
初始化:全域性變數預設初始化為0,
區域性變數為隨機值
c 知識總結2
四 c 型別轉換 型別轉換就是把一種型別轉換成為另一種型別。隱式型別轉換 c 預設的以安全方式進行的轉換。例如小整數型別轉換為大整數型別 派生類轉換為基類 顯式型別轉換 使用者使用的預定義的函式顯式完成。需要強制型別轉換符。五 c 變數 變數定義 資料型別 識別符號 初始化 資料型別 識別符號 值 ...
c語言知識總結2
一維陣列的定義格式,型別說明符 陣列名 常量表示式 例如 int a 10 c語言中不允許對陣列的大小做動態的定義,即陣列大小不能用變數表示。一維陣列的陣列元素占用的位元組數為4個位元組。幾種錯誤寫法 float a 0 陣列元素大小為0沒有意義 int b 9 不能使用圓括號 int k,a k ...
面試 C語言C 小知識總結(2)
1 重寫和過載的區別 範圍區別 被重寫的函式和重寫的函式在兩個類中,而過載和被過載的函式在同乙個類中 引數的區別 被重寫函式和重寫函式的引數一定相同,但是過載函式和被過載函式的引數列表一定不同 virtual的區別 重寫的基類中被重寫的函式必須要有virtual修飾而過載函式和被過載函式可以被修飾也...