c語言動(dòng)態(tài)分配和靜態(tài)分配的區(qū)別?
一、形式不同:
靜態(tài)變量是在定義的時(shí)候,有static 修飾的變量,形式為static TYPE var_name = init_value;
動(dòng)態(tài)變量,形式為TYPE var_name = init_value;即沒有static 修飾,其中的=init_value均可省略。
二、作用不同:
動(dòng)態(tài)全局變量:作用域?yàn)檎麄€(gè)項(xiàng)目,即最終編譯成可執(zhí)行文件的所有文件中均可以使用動(dòng)態(tài)全局變量,生命周期為從程序運(yùn)行到程序退出,即貫穿整個(gè)運(yùn)行時(shí)間。
靜態(tài)全局變量:作用域?yàn)楫?dāng)前文件,從定義/聲明位置到文件結(jié)尾,生命周期為從程序運(yùn)行到程序退出,即貫穿整個(gè)運(yùn)行時(shí)間。
常量使用
靜態(tài)變量也可以用于存儲(chǔ)常數(shù)。具體來說,靜態(tài)變量(全局變量及匯編語言里定義的符號亦同)可用const,constant或final(根據(jù)語言決定)等關(guān)鍵字標(biāo)識(shí),這時(shí)其值就會(huì)在編譯時(shí)設(shè)定,并且無法在運(yùn)行時(shí)改變。
編譯器通常將靜態(tài)常量與文本一起置于目標(biāo)文件的文本區(qū)域,而非常量初始化數(shù)據(jù)則置于數(shù)據(jù)區(qū);而如若有需要,有些編譯器還可選擇為其開辟專用區(qū);為防止常數(shù)變量被錯(cuò)誤的指針寫入覆蓋,亦可在這塊區(qū)域啟用內(nèi)存保護(hù)機(jī)制。