程式的記憶體四區 二級指標 條件編譯

2021-10-04 17:19:02 字數 1419 閱讀 3035

記憶體的四區模型

ps:常量區在全域性區中

棧區和堆區

#include #include #include //堆

char *getmem(int num)

return p1;

}//棧

//注意 return不是把記憶體塊 64個位元組,給return出來

//而是把記憶體塊的首位址(比如記憶體的編號0xaa11) ,返回給 tmp

// 理解指標的關鍵是記憶體,沒有記憶體**來的指標

char *getmem2()

void main(void)

strcpy(tmp, "111222"); //向tmp做指向的記憶體空間中copy資料

tmp = getmem2(); //tmp = 0xaa11;

return 0;

}

全域性區
#include char * getstr1()

main函式中可以在棧/堆/全域性分配記憶體,都可以被func1和func2使用

func2在棧上分配的記憶體,不能被func1和main函式使用

func2中malloc的記憶體(堆),可以被main和func1函式使用

func2中全域性分配「abcdefg」(常量全域性區)記憶體,可以被func1和main函式使用

棧的生長方向和記憶體存放方向

二級指標

間接賦值*p是指標存在的最大意義

#include using namespace std;

void fun1(int *p){

p=(int *)0x7fff56dae9d7; //這裡的p是在棧區,這樣做並不會修改p1指標所指向的記憶體位址

cout條件編譯

條件編譯的作用

1)防止標頭檔案被重複包含引用

2)軟體裁剪

同樣的c源**,條件選項不同可以編譯出不同的可執行程式。

二級指標和記憶體四區的模型

看了一下前面寫的關於指標見解,以及關於記憶體四區的見解,然後感覺寫的不是特別清楚,然後自己就畫了一張圖來表示他們之間的關係,我想如果能看懂我這張圖,記憶體四區以及二級指標差不多就明白了 下面先上 1 define crt secure no warnings 2 include 3 include ...

程式的記憶體模型 記憶體四區

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域 區和全域性區 區 存放函式體的二進位制 由作業系統進行管理 存放cpu執行的機器指令。區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份 即可。區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令 全域性區 存放...

二級指標的記憶體模型小結

the start 此處定義 主調函式分配記憶體,稱之為輸入 被調函式分配記憶體,稱之為輸出 指標是為記憶體服務的。二級指標做輸入 第一種型別 include stdio.h include stdlib.h include string.h intprintfstr char str,int st...