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這兩個巨集
相關文章
- 對於效能測試的一些想法,歡迎交流
- 圖書借閱,歡迎交流、
- 外包交流VX群 歡迎加入
- C++ STL的go語言版本,歡迎各位大佬完善C++Go
- c/c++/java/go/php/python/rust..的本質2C++JavaGoPHPPythonRust
- 記錄一些React的一些細節,會不斷更新React
- 總結一些學習資源網站(不斷更新中)網站
- C++中的&和&&C++
- C和C++中的staticC++
- 關於C和C++混編的一些心得C++
- Linux常用命令(不斷更新中)Linux
- C++ 中的lambda表示式【C++11版本】C++
- C++ 中的 volatile 和 atomicC++
- C++中&和*的含義C++
- C++中的NULL和nullptrC++Null
- 最真實的C++比賽就在這裡了,明晚開始歡迎挑戰!C++
- C++特點,物件的概念,初始化和賦值C++物件賦值
- [持續更新]——關於C++的一些可能會常用的函式C++函式
- 聊聊 C++ 和 C# 中的 lambda 玩法C++C#
- C/C++中的實參和形參C++
- 這可能是國內Qt/C++界最受歡迎開源專案之一/5.8Kstar/持續迭代更新QTC++
- C和C++中的名字空間和作用域C++
- C++ opencv中的namedWindow和imshowC++OpenCV
- c++函式模板和類别範本C++函式
- c++ typedef的一些理解C++
- C++ vector 的一些操作C++
- 關於c、c++之前比較模糊的概念C++
- Objective-C 類的本質Object
- c++ 中.h 和.cppC++
- LLM中的一些概念
- C++ 可呼叫物件的概念 callable objectC++物件Object
- C++知識點 —— 整合(持續更新中)C++
- Dynamics 365(CRM) 歡迎加入商務技術交流QQ群(MSCRM商務技術交流群149371424)
- c/c++ 模板 型別推斷C++型別
- C語言容易混淆的一些概念C語言
- C++中的return和exit區別C++
- C++中堆和棧的完全解析C++
- C++中的運算子和表示式C++