linux C 的記憶體分布情況

2021-06-22 11:42:13 字數 1258 閱讀 1781

寫了一段**,驗證了一下記憶體的分布情況:

#include

using namespace std;

int k = 300;

static int global_static = 0;

const int i = 100;

#define n 10

const int j = 200;

int fun (int i = 1, int j =2)

輸出結果

address of parameter variable:

&i = 0x7fff61c8c7cc     &j = 0x7fff61c8c7c8

address of local variable:

&k = 0x7fff61c8c7d8     &p = 0x7fff61c8c7d0     &m = 0x7fff61c8c7dc

address of static local variable:

&l = 0x6022c8

address of heap: 0x2168010

before delete p =abcdefghij

after delete: 0x2168010

p =address of global variable: 

&i = 0x400fb4   &j = 0x400fb8   &k = 0x602070

address of function: 

&fun = 1        &main =1

&global_static = 0x6022c4

*************************分割線***************====

先說明幾個概念:

在全域性中定義的叫做全域性資料型別,在某個函式中定義的叫做區域性資料型別。

使用static修飾的叫做靜態變數,使用const修飾的叫做常量

靜態變數是i可以修改的,但是全域性只有乙個,但是常量是不能修改的。

靜態變數(使用static修飾的,無論區域性還是全域性),全域性變數,全域性常量都在全域性資料區中。需要注意的是:

1.區域性的常量是存在棧中的,改區域性常量在它的作用域中是不可修改的,但是當它所在的函式退出之後,該常量也會隨之被析構。所以不能將區域性常量的值作為返回值使用。

2.區域性的靜態變數雖然儲存在全域性資料區,但是作用域只能在所在的函式中,對其他函式不可見。

iOS記憶體分布情況

自 記憶體分割槽 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os ios中alloc都是存放在堆中 3 全域性區 靜態區 static 全域性變數和...

類與物件在記憶體中的分布情況

人類名 person 屬性 成員變數 例項變數 體重 年齡 行為 方法 走路 吃 import 1.類的宣告 成員變數 方法的宣告 inte ce person nsobject 也不能新增static修飾 void walk void eat end 乙個類的宣告對應乙個end,中間不能巢狀別的類...

linux c的記憶體映像

記憶體映像其實就是在記憶體中建立乙個和外存檔案完全相同的映像。使用者可以將整個檔案對映到記憶體中也可以部分對映到記憶體。系統會將對記憶體映像的改動如實的反映到外存檔案中。從而實現了通過記憶體映像對外存檔案的操作。記憶體映像的特點 1 可以加快對io的操作速度。2 使用者可以通過指針對檔案進行操作,間...