動態棧中記憶體布局

2021-07-13 12:11:38 字數 1055 閱讀 7021

1.1程序中記憶體布局

1.2 函式呼叫中棧記憶體

main()->int print_out(int begin, int end)呼叫棧

函式呼叫時:

main函式首先壓入:

print_out

的實參1,2

;接受返回值的位址(如果沒有返回值?),

main

的ebp

print_out的

ebp =(main)esp

,esp

後移動建立新print_out函式棧

1.3函式棧中變數的位置

(ubuntu/android)

1.普通區域性變數

不同型別的變數,由定義的位置順序,從位址高到底排列

int a

b...

編譯器優化

有陣列的情況

int d[1]...d[0]

int b[1]

int b[0]

int a

char *c

ubuntu上的規則

相同型別普通變數,相鄰分配,分配位址與定義

順序相反

陣列在全部在高位位址,相同型別陣列相鄰,並分配位址與定義

順序相反

2.if/switch等有作用域

/生命週期 區域性變數位置

與普通全域性變數相同,以相同的規則穿插在普通變數的位址中間

(不同區的if

中的區域性變數,可能會共用位址)

有class/struct

的情況class物件在

定義變數的穿插,可能再array

之前3.for中定義的區域性變數,每次迴圈位址不變

記憶體中棧 堆

字串常量,放在哪個儲存區呢?是 自動儲存區 還是 靜態儲存區 中?比如 char pstr hello world 這裡,hello world 是乙個字串常量,pstr是在棧中的變數。我想問,字串常量,在哪個記憶體區域分配空間呢?好像應該不是在 棧區 分配空間吧!一 預備知識 程式的記憶體分配 乙...

C中的記憶體布局

原文 典型的c程式記憶體由以下幾個部分構成 1.段 text segment 2.資料段 initialized data segment 3.bss段 uninitialized data segment 4.棧 stack 5.堆 heap 1.段 通常被用來儲存程式的可執行 這部分區域大小在程...

程式中的記憶體布局

先看一張示意圖 不同 在可執行程式中的對應關係 程式和程序的不同 程式是 靜態的 概念,表現形式為乙個可執行檔案 程序是 動態的 概念,程式由作業系統載入執行後得到程序 每個程式可以對應多個程序 每個程序只能對應乙個程式 指令碼程式是一種可執行程式,但是它需要作業系統載入指令碼解釋程式來生成程序,然...