code
memory
C
在C/C++中的變數有三種不同的storage duration(儲存週期)
在函式外的全域變數或在函式內但是刻意以static
關鍵字修飾的變數會是屬於static storage duration。他的生命週期(lifetime)是從程式開始執行的時候開始,程式結束之後才會被釋放。整個程式運行時會佔用固定的記憶體空間。例如:
static storage duration的變數會有以下特性:
NULL
。所以上面的g_variable1 = 0
, local_static_variable = 0
, g_variable2 = 5
。當然陣列也是a[0] = 0
, a[1] = 0
, …a[9] = 0
。
在函式內部的變數、函式的引數(argument)如果沒有特別聲明,就是automatic storage duration。變數的生命週期始於存放變數的視野(scope)開始處,止於視野的結束處。例如:
automatic storage duration的變數會有以下特性:
根據第4點,array3[2] = 0
, array3[3] = 0
,有時候我們會在宣告的後面加上= {0}
來將整個陣列初始化為0。不過要注意的是= {10}
並非把所有的元素初始化為10,只有第一個會是10,其他的都會是0。
heap storage duration是用於動態配置記憶體。其生命週期是在被malloc
時開始,結束於free
的時候。heap storage duration不會被初始化。例如:
需要注意的是my_array
這一個指標本身是屬於automatic storage duration,是may_array
所指向的變數才是heap storage duration。