C 強引用和弱引用

2021-08-28 21:38:40 字數 533 閱讀 3092

鏈結器處理強引用和弱引用的過程幾乎是一樣的,只是對於未定義的弱引用,鏈結器不認為它是乙個錯誤,一般預設其為 0(位址為 0),或者是乙個特殊的值,以便程式**能夠識別。

__attribute__((weak)) extern int a;

printf("a = %d\n", a);

我們可以將它編譯成乙個可執行檔案,gcc 並不會報鏈結錯誤。但是當程式執行時,輸出&a: 0, func: 0後就會發生段錯誤(segment fault),這是因為符號 a 和 func 的位址都為 0,這個位址是禁止訪問的。

**中需要判斷的是位址,不是值,所以變數 a 前面需要加&;而函式名本身就表示位址,所以 func 前邊不需要&

弱引用和強引用非常利於程式的模組化開發,我們可以將程式的擴充套件模組定義為弱引用,當我們將擴充套件模組和程式鏈結在一起時,程式就可以正常使用;如果我們去掉了某些模組,那麼程式也可以正常鏈結,只是缺少了某些功能,這使得程式的功能更加容易裁剪和組合。

強引用和弱引用

weak 和 strong 會出現在宣告中 預設情況下,乙個指標都會使用 strong 屬性,表明這是乙個強引用。這意味著,只要引用存在,物件就不能被銷毀。這是一種所期望的行為 當所有 強 引用都去除時,物件才能被收集和釋放。不過,有時我們卻希望禁用這種行為 一些集合類不應該增加其元素的引用,因為這...

弱引用和強引用

如果目標檔案對外部目標檔案符號進行強引用,但在鏈結成可執行檔案時不能被正確的決議 好奇怪的名稱,看看p 51 鏈結器就會報錯,這是對於強引用 strong reference 而言的。與之相對應還有一種弱引用 weak reference 在處理弱引用時,如果該符號有定義,則鏈結器將對該符號的引用進...

強引用和弱引用( strong和

初學者乾貨 在oc arc模式下開發 id objca nsobject alloc init 預設宣告的乙個物件就為 strong強引用,等價於 id strong objca nsobject alloc init 注 在強引用中,有時會出現迴圈引用的情況,這時就需要弱引用 weak 來幫忙 如...