棧幀的結構

2021-10-22 16:28:51 字數 574 閱讀 1545

區域性變數

當前方法的區域性變數

基本資料型別存值,引用資料型別存位址

資料槽(slot)->專門對應於我們儲存資料的位元組

乙個資料槽4個位元組,所有基本資料型別和引用資料型別基本上都是占用乙個槽,只有double和long占用兩個槽,為了**的快速分配

一般情況下非靜態方法的第乙個位置存放的是當前物件的引用(this)

運算元棧

對方法中的變數提供計算的區域

常量資訊,常量資料的引用

常量資料會專門存放到常量池中,基本資料型別、引用資料型別都存放常量池的位址

在使用的時候會將符號引用轉移成直接引用

方法返回位址

方法返回值的位址

描述資訊

過程(棧幀結構是乾貨)

此處非常重要 關係到對函式呼叫和返回理解是否到位 解說 顯然是位址80483dc的call呼叫sum函式,call指令的效果是將返回位址0x080483e1壓入棧中,再跳轉到sum函式的第一條指令 0x0804394 直到遇到ret指令為止,即是說,ret指令是乙個函式的結束標誌 call push...

分析JVM虛擬機器棧的棧幀結構

1.先說虛擬機器棧 虛擬機器棧是位於虛擬機器記憶體中的一片記憶體區域,它是執行緒私有的 乙個執行緒分配乙個虛擬機器棧空間 它用來儲存棧幀,乙個棧幀就對應著乙個方法。棧幀的出棧和入棧對應著方法的結束和呼叫的開始。2.再說棧幀 乙個完整的棧幀儲存著以下資訊 區域性變數表,運算元棧,棧幀資訊三大部分,下面...

程式棧 棧幀

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