Objective C指標 棧幀 棧

2021-08-11 10:30:10 字數 894 閱讀 8976

1、objective-c的指標是用來只是物件的,例如:

nsstring *somestring = @「the string」;

這種語法基本上是照搬c語言的,宣告了乙個名為somestring的變數,其型別為nsstring* ,也就是說此變數為指向nsstring的指標。

所有objective-c的物件都必須這樣宣告,因為物件所佔記憶體總是分配在「堆空間(heap space)」,而不會分配在「棧(stack)」上。

2、nsstring *somestring = @「the string」;

nsstring *anotherstring = somestring;

somestring變數指向分配在堆中的某塊記憶體,anotherstring為又建立乙個變數指向同乙個位址,並不是拷貝此物件,只是somestring和anotherstring兩個變數指向同乙個物件,

兩個變數都是nsstring *型,這說明當前「棧幀(stack frame)」中分配了兩塊記憶體,每塊記憶體的大小都能容下一枚指標(32位計算機上是4位元組,64位計算機是8位元組),這兩塊記憶體裡的只都是一樣的,就是nsstring例項的記憶體位址

分配在堆中記憶體必須直接管理,二分配在棧上用於儲存變數的記憶體則會在其棧幀彈出時自動清理,objective-c將記憶體管理抽象出來了,不需要用malloc及free來分配或釋放記憶體,objective-c執行期環境把這部分工作抽象為一套記憶體管理架構,名為「引用計數」。

在objective-c中也有不含*的變數,也可能會使用棧空間,這些變數儲存的不是物件,比如cgrect(結構體),整個系統框架都在用這種結構體,如果改用objective-c物件來做的話,效能會受到影響。

幀指標和棧指標

2013年11月29日 14 24 41 huntinggo 閱讀數 2743 標籤 linux 作業系統 更多 個人分類 linux 原來幀指標指向的也是棧,不過是乙個故事的開始。而棧指標是乙個故事的當下。那幀指標為啥叫ebp,難道b base。因為幀指標也叫基址指標。幀指標使得訪問函式的引數很容...

程式棧 棧幀

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 棧區 stack 由編譯器自動分配釋放 存放函式的引數名,區域性變數的名等。其操作方式類似於資料結構中的棧。堆區 heap 由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。靜...

棧操作與棧幀

結構化程式的乙個最基本的單元就是 函式 或者叫 過程 在彙編這一層自然也相應的有支援這些概念的指令操作,如棧操作和棧幀的概念。1 定址方式 我們已經知道在運算元表示中有一種是用來指示記憶體位址的內容的,在gnu assembly中指示記憶體位址有多種方式,這些方式被統稱 定址方式 通用的定址格式為 ...