C和C++中一些概念的本質(不斷更新,歡迎交流)
引用的本質:
引用是一個特殊的變數,這個變數的內容是繫結在這個引用上面的物件的地址,使用這個變數時,系統就會自動根據這個地址去找到它繫結的變數,然後再對變數進行操作。所以本質上來說,引用還是指標,只是這個指標不能修改,任何對它的操作都會發生在這個指標所指向的地方,而不是在這個指標上。
代理的本質:
通過代理對物件的操作,是通過引用或者指標來進行的,通過這種方式,就可以提高效率。
free()函式的本質:
free()的呼叫方式是:void free(void *ptr)。是釋放由ptr所指的記憶體,並將它返回給堆,以便這些記憶體成為再分配時的可用記憶體。free()函式只能用於以前由動態地址分配的函式。如果呼叫無效指標很可能毀壞記憶體管理機制,並且引起系統破壞的。
free是呼叫作業系統的函式,將原先分配的記憶體區域釋放。在作業系統中分配記憶體不是簡單的給一個指標,而是在核心中維護每個程式的分配記憶體表,free則是用指標找到對應分配的表項然後釋放。
釋放記憶體不是丟掉指標。否則的話後患無窮,就是記憶體洩漏。那麼malloc到底做什麼?free到底做什麼?簡單的說,malloc在一個特定的記憶體區劃出一塊你利用引數指定的大小的記憶體塊,然後把這塊記憶體的開始地址返回。這要求你用一個指標來接收。否則也會出現記憶體洩漏。因為這塊記憶體你申請了之後,並沒有釋放。說到這裡補充一句,malloc函式分配的記憶體空間不會自動釋放,需要你操作來完成。需要的操作就是free。那麼free做什麼呢?就是將指標指定的記憶體空間釋放,如果發現指定的記憶體空間不是在與malloc匹配的記憶體空間,free操作就會失敗。所以free做的是釋放指標指向的用malloc申請的特定的記憶體空間,而不是指標本身。
結論:使用方法 對於用malloc分配空間的指標p, 使用過後要這樣釋放:
free(p);
p=NULL;
也就是說,只是釋放記憶體,而指標其實一直都在,只是為NULL。
友情連結:https://blog.csdn.net/hihozoo/article/details/51441521
const的本質
const修飾的是變數,只是這個變數是隻讀的。(可以通過指標進行修改)
現代的編譯器(gcc、vc)會將const修飾的全域性變數編譯進入只讀儲存區,如果對其進行修改,則會報錯;
對於區域性變數,則儲存在棧上。
#define巨集定義的本質
巨集定義的常量本質是字面量,不佔用記憶體,而是儲存在只讀儲存區。
#typedef的本質
它只是給一個已經存在的資料型別重新命名,本質是不產生新的資料型別。
條件編譯的本質
前處理器根據條件編譯指令有選擇的刪除程式碼,編譯器其實並不知道分支程式碼的存在。
而if...else...是在編譯階段進行分支判斷的,與#ifdef...#else...#endif有本質上的區別。
#include的本質
#include的本質是將已經存在的檔案嵌入到當前檔案中,重複包含會報錯,變成重複定義。(條件編譯可以解決重複包含標頭檔案的情況)
#line的本質
#line的本質是重定義 __FILE__和__LINE這兩個巨集
相關文章
- C++中引用和匿名物件的理解和本質剖析C++物件
- 深受C/C++程式設計師歡迎的11款IDEC++程式設計師IDE
- AndroidStudio中遇到的一些問題[不間斷更新]Android
- C++ STL的go語言版本,歡迎各位大佬完善C++Go
- Javascript Lib (不斷更新中)JavaScript
- 總結一些學習資源網站(不斷更新中)網站
- 記錄一些React的一些細節,會不斷更新React
- c++中的抽象概念詳解C++抽象
- c/c++/java/go/php/python/rust..的本質2C++JavaGoPHPPythonRust
- C++批判系列5--繼承的本質 (轉)C++繼承
- 警惕自己,不斷學習c++【轉】C++
- c++中模板_類别範本的宣告和定義C++
- C++中的&和&&C++
- c++ 中的this 和*thisC++
- 寫了個連線池的類,和大家一起探討,歡迎交流
- UITableView中發現的小技巧(不斷更新)UIView
- C和C++中的staticC++
- Java執行緒中斷的本質深入理解Java執行緒
- C/C++中printf和C++中cout的輸出格式C++
- C#教程:簡單的歡迎程式
- 股票操作手冊(不斷更新中)
- JAVA開原始碼交流QQ群!!歡迎加入並討論!!Java原始碼
- 微信分享,交流學習oracle技術,歡迎大家關注Oracle
- 我喜歡 C++C++
- C++程式設計批評系列 繼承的本質(轉)C++程式設計繼承
- c++: size_type 與 size_t一些概念C++
- 程式猿/媛必備的開發學習資源彙總(不斷新增中,也歡迎大家補充...)
- 關於C和C++混編的一些心得C++
- c++中的一些迴圈語法C++
- 【C++】C++常見面試題彙總,持續更新中…C++面試題
- Linux常用命令(不斷更新中)Linux
- CI中PHP寫法規範(不斷更新)PHP
- WINDOWS 常用常量定義大全(不斷更新中)Windows
- QuickCHM2.01破解小記,歡迎大家一起交流UI
- C++虛繼承的概念C++繼承
- C++中&和*的含義C++
- 最真實的C++比賽就在這裡了,明晚開始歡迎挑戰!C++
- 理不辨不明,寫了一些關於分散式的理解,歡迎各位批評指正分散式