Linux中C程序的存儲空間佈局
可以從《APUE》上面摘得下圖所示,即爲Linux中C程序的存儲空間佈局情況。從低地址到高地址依次分爲五大部分
1.正文段。即爲代碼段,它存儲的是CPU執行的機器指令,這部分是共享的,即存儲其中只有正文段的一個副本。另外,正文段一般都是隻讀的,防止程序意外修改其指令。
2.初始化數據段(數據段)。這段存儲空間主要存放的是全局作用域中明確賦初值了的變量。
3.未初始化數據段(BSS段)。這段存儲空間主要存放的是全局作用域中沒有明確賦初值的變量,在程序開始執行之前,內核將這段中的數據初始化爲0或者空指針。
4.堆(heap)。堆通常用於動態存儲分配,是從低地址往高地址方向增長。
5.棧。局部變量以及每次函數調用時所需要保存的信息存放在棧區,每次函數調用都會新建一個新的棧幀,因此,每個函數調用的過程都是單獨,不會互相影響,除了static變量之外。棧是從高地址向低地址方向增長。
我們可以通過一個實例來深入瞭解一下: