C语言内存/指针相关
內(nèi)存
數(shù)據(jù)類型–更好的內(nèi)存管理
數(shù)據(jù)類型:固定大小內(nèi)存的別名
typedef
結(jié)構(gòu)體的別名 typedef struct Student MyStudent
給指針起別名 typedef char * PCHAR
給變量起別名 typedef longlong mylong_t
注意:
void類型不能typedef
void只能對函數(shù)返回和參數(shù)的限定
void* 可以指向任何類型的數(shù)據(jù)(不需要強(qiáng)制轉(zhuǎn)換)
定義一個變量,編譯器必須知道分配多少內(nèi)存
sizeof
返回的是為這個變量開辟的大小
返回數(shù)據(jù)類型是unsigned int
sizeof計算數(shù)組
內(nèi)存區(qū)
| 內(nèi)存分區(qū) | 備注 |
命令行參數(shù) | env,args |
棧 ↓ | 高地址向低地址 |
共享庫 | |
堆 ↑ | 低地址向高地址 |
未初始化數(shù)據(jù)段 | .bss |
初始化數(shù)據(jù)段 | .data |
代碼段(靜態(tài)庫) | .text |
受保護(hù)頭 | (void*)0 |
int a ; // 外部鏈接
static int a; // 內(nèi)部鏈接
"helloworld" //常量區(qū)
const修飾的全局變量 // 常量區(qū) 一旦初始化 不能修改
程序運(yùn)行后:
堆區(qū) // 手動開辟 手動釋放,程序員不釋放,在程序結(jié)束,操作系統(tǒng)會釋放
棧區(qū) 編譯器自動分配、釋放
全局靜態(tài)區(qū)(全局變量和靜態(tài)變量是放在一起的,初始化和未初始化會分開存放)
全局區(qū) 全局變量(未初始化會成0)
靜態(tài)區(qū)
常量區(qū) 不能修改,程序結(jié)束由操作系統(tǒng)釋放?const char * p = "helloworld"
靜態(tài)
全局靜態(tài)變量和局部靜態(tài)變量都存儲在靜態(tài)區(qū) 都在運(yùn)行期間合法有效
static是內(nèi)部鏈接
編譯
頭文件不參與編譯,每一個.c是編譯單元
編譯器獨(dú)立編譯每一個.c文件
頭文件只放聲明,不能放定義
extern
不寫默認(rèn)是外連接的(extern)
表示 符號是存在的,先編譯通過,讓鏈接器找符號在哪
const
const 全局變量 在常量區(qū) 直接間接都不能修改
const 局部變量,在棧上,可以間接修改
volatile
阻止編譯器對變量進(jìn)行優(yōu)化,每次重新從內(nèi)存(變量的地址)中獲取值
聲明:
本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)事宜。
總結(jié)
以上是生活随笔為你收集整理的C语言内存/指针相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可转债转股价后多久可以得到股票?
- 下一篇: 常用于单片机的接口适配器模式C语言实现