一、作用域
全域性變數和區域性變數
靜態全域性和區域性變數 總結
型別作用域
生命週期
區域性變數 int a =10
從變數定義到函式結束
區域性變數建立到函式結束
全域性變數 int a =10
整個專案檔案
程式建立到程式結束
static 區域性變數 int a =10
從變數定義到函式結束
程式建立到程式結束
static 全域性變數 int a =10
當前檔案
程式建立到程式結束
static void func( )
當前檔案
程式建立到程式結束
void func( )
整個專案檔案
程式建立到程式結束
二、記憶體布局
記憶體四區模型
棧區:變數、陣列、結構體、指標、列舉、函式形參、常量(c語言存在棧區,c++存在資料區)。
死迴圈不會佔滿記憶體,但是會佔滿cpu;遞迴會導致程式崩潰,棧溢位al
lo
cmalloc
malloc
和 ne
wnew
new 建立的
資料儲存範圍
**區(記憶體低位址)
資料區堆區
棧區(記憶體高位址)
部分公用
部分公用
堆大小與物理記憶體有關
不是公用,但是可以被訪問,向下生長
字串空間操作
char *p = " hello world";//字串常量,不能被修改,資料區
p[1] = "e";//這種初始化的字串不能進行修改
記憶體操作函式
記憶體重置函式:
memset(目標(需要操作的記憶體首位址,可以是棧區也可以是堆區),0,值,位元組大小);//將一塊記憶體重置為0。一般值都取0,別的容易出錯,你可以試試1,會發現出來的不是列印出來不是1
拷貝函式
memcpy(dst,src,位元組大小);//將src所指的記憶體內容前n個位元組拷貝到dst所指記憶體,注意拷貝的記憶體資料和目標不要重合
memmove()//引數和memcpy一樣,即使需要拷貝空間重合,這個函式也可以操作,但是效率比memcpy低
比較大小函式
memcmp(const void* s1, const void* s2, n);//比較s1,s2記憶體首位址開始前n個位元組,相等為0;大於》0;小於<0
c 之記憶體管理
c 使用3 種不同解決方案儲存資料,區別是資料保留在記憶體中的時間 兩種儲存持續性為自動 自動變數和暫存器變數 register 沒有記憶體位址 堆疊 在函式外定義的變數和使用關鍵字static定義的變數的儲存持續性都為靜態.分為 3 外部鏈結性,內部鏈結性和無鏈結性 所有靜態變數都有下面的兩個初始...
C 之記憶體管理
malloc calloc realloc 上述三種方式是使用者在堆上開闢空間的辦法,用完後必須用free釋放,否則會造成記憶體洩露。值得一提的是實際開闢的記憶體比申請的空間大 前面多申請32個位元組,後面多申請4個位元組。具體原因這裡就不再闡述,詳情見c語言動態分配記憶體 c語言記憶體管理方式在c...
php之記憶體管理基礎
用 c 語言程式設計時,開發者要手工地進行記憶體管理。因為 php 經常用作 web 伺服器的模組,記憶體管理與預防記憶體洩漏緊密關聯。此外要知道 php 可能用於執行緒環境中,這意味著全域性變數可能導致競爭狀況。有關執行緒內全域性資料處理的資訊請參見作為執行緒隔離設施的 執行緒安全的資源管理器。此...