国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言-學(xué)習(xí)之路-07

這篇具有很好參考價值的文章主要介紹了C語言-學(xué)習(xí)之路-07。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

內(nèi)存管理
作用域

C語言中變量的作用域可分為:代碼作用域、函數(shù)作用域、文件作用域

局部變量

局部變量也叫auto自動變量,一般情況下代碼塊{}內(nèi)部定義的變量都是自動變量,它有如下特點:

  • 在一個函數(shù)內(nèi)定義,只在函數(shù)范圍內(nèi)有效
  • 在復(fù)合語句中定義,只在函數(shù)范圍內(nèi)有效
  • 隨著函數(shù)調(diào)用的結(jié)束或復(fù)合語句的結(jié)束局部變量的聲明周期也隨即結(jié)束
  • 如果沒有賦初值,內(nèi)容為隨機
靜態(tài)(static)局部變量
  • static局部變量的作用域也是在定義的函數(shù)內(nèi)有效
  • static局部變量的生命周期和程序運行周期一樣,同時static局部變量的值只初始化一次,但可以賦值多次。
  • static局部變量若未賦以初值,則由系統(tǒng)自動賦值:數(shù)值型變量自動賦初值0,字符型變量賦空值。
全局變量
  • 在函數(shù)外定義,可被本文件及其它文件中的函數(shù)所共用,若其它文件中的函數(shù)調(diào)用此變量,須用extern聲明。
  • 全局變量的生命周期和程序運行周期一樣。
  • 不同文件的全局變量不可重名。
extern全局變量聲明

extern int a; 聲明一個變量,這個變量在別的文件中已經(jīng)定義了,這里只是聲明,而不是定義。

全局函數(shù)和靜態(tài)函數(shù)

在C語言中,函數(shù)都是默認全局的,使用關(guān)鍵字static可以將函數(shù)聲明為靜態(tài),函數(shù)定義為static就意味這個函數(shù)的文件中使用,在其他文件中不能調(diào)用,即使在其他文件中聲明這個函數(shù)都沒用。
對于不同文件中的static函數(shù)名字可以相同。
注意
允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾。
同一源文件中,允許全局變量和局部變量同名,在局部變量的作用域內(nèi),全局變量不起作用。
所有的函數(shù)默認都是全局的,以為著所有的函數(shù)都不能重名,但如果是static函數(shù),那么作用域是文件級的,所以不同的文件static函數(shù)名可以是相同的。

類型 作用域 聲明周期
auto變量 一對 { }內(nèi) 當(dāng)前函數(shù)
static局部變量 一對 { }內(nèi) 整個程序運行期
extern變量 整個程序 整個程序運行期
static全局變量 當(dāng)前文件 整個程序運行期
extern函數(shù) 整個程序 整個程序運行期
static函數(shù) 當(dāng)前文件 整個程序運行期
register變量 一對 { }內(nèi) 當(dāng)前函數(shù)
內(nèi)存分布
內(nèi)存分區(qū)

C程序代碼經(jīng)過預(yù)處理、編譯、匯編、鏈接4步后生成一個可執(zhí)行程序。
在Linux下,程序是一個普通的可執(zhí)行文件。在沒有運行程序前,即程序沒有加載到內(nèi)存前,可執(zhí)行程序內(nèi)部已經(jīng)分為3段信息,分別為代碼區(qū)(text)、數(shù)據(jù)區(qū)(data)和未初始化數(shù)據(jù)區(qū)(bss)。

  • 代碼區(qū)
    存放CPU執(zhí)行的機器指令。通常代碼區(qū)可是共享的(即另外的執(zhí)行程序可以調(diào)用它),使其可共享的目的是對于頻繁被執(zhí)行的程序,只需要在內(nèi)存中有一份代碼即可。代碼區(qū)通常是只讀的,使其只讀的原因是防止程序意外地修改了它的指令。另外,代碼區(qū)還規(guī)劃了局部變量的相關(guān)信息。
  • 全局初始化數(shù)據(jù)區(qū)/靜態(tài)數(shù)據(jù)區(qū)(data)段
    該區(qū)包含了在程序中明確被初始化的全局變量、已經(jīng)初始化的靜態(tài)變量(包括全局靜態(tài)變量和局部靜態(tài)變量)和常量數(shù)據(jù)(如字符串常量)。
  • 未初始化數(shù)據(jù)區(qū)(bss區(qū))
    存入的是全局未初始化變量和未初始化靜態(tài)變量。未初始化數(shù)據(jù)區(qū)的數(shù)據(jù)在程序開始執(zhí)行之前被內(nèi)核初始化為0或者為空NULL。

程序在加載到內(nèi)存前,代碼區(qū)和全局區(qū)(data和bss)的大小就是固定的,程序運行期間不能改變。然后,運行可執(zhí)行程序,系統(tǒng)把程序加載到內(nèi)存,除了根據(jù)可執(zhí)行程序的信息分出代碼區(qū)(text)、數(shù)據(jù)?。╠ata)、和未初始化數(shù)據(jù)區(qū)(bss)之外,還額外增加了棧區(qū)、堆區(qū)。
C語言-學(xué)習(xí)之路-07文章來源地址http://www.zghlxwxcb.cn/news/detail-435974.html

  • 代碼區(qū)(text segment)
    加載的是可執(zhí)行文件代碼段,所有的可執(zhí)行代碼都加載到代碼區(qū),這塊內(nèi)存是不可以在運行期間修改的。
  • 未初始化數(shù)據(jù)區(qū)(BSS)
    加載的是可執(zhí)行文件BSS段,位置可以分開亦可以緊靠數(shù)據(jù)段,存儲于數(shù)據(jù)段的數(shù)據(jù)(全局未初始化,靜態(tài)未初始化數(shù)據(jù))的生存周期為整個程序運行過程。
  • 全局初始化區(qū)/靜態(tài)數(shù)據(jù)區(qū)(data segment)
    加載的是可執(zhí)行文件數(shù)據(jù)段,存儲于數(shù)據(jù)段(全局初始化,靜態(tài)初始化數(shù)據(jù),文字常量(只讀))的數(shù)據(jù)的生存周期為整個程序運行過程。
  • 棧區(qū)(stack)
    棧是一種先進后出的內(nèi)存結(jié)構(gòu),由編譯器自動分配釋放,存放函數(shù)的參數(shù)值、返回值、局部變量等。在程序運行過程中實時加載和釋放。因此,局部變量的生存周期為申請到釋放該段棧空間。
  • 堆區(qū)(heap)
    堆是一個大容器,它的容量要遠遠大于棧,但沒有棧那樣先進后出的順序。用于動態(tài)內(nèi)存分配。堆在內(nèi)存中位于BSS區(qū)和棧區(qū)之間。一般由程序員分配和釋放,若程序員不釋放,程序結(jié)束時由操作系統(tǒng)回收。

到了這里,關(guān)于C語言-學(xué)習(xí)之路-07的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 44-js return返回值,全局作用域,局部作用域,隱式作用域,變量的生命周期,delete釋放內(nèi)存

    44-js return返回值,全局作用域,局部作用域,隱式作用域,變量的生命周期,delete釋放內(nèi)存

    1. return 返回值:函數(shù)執(zhí)行后剩下結(jié)果就是返回值。 2.作用域 查找變量的時候,會從當(dāng)前作用域開始查找,如果當(dāng)前作用域查找不到,逐層(外層)向上查找 2.1全局作用域 2.2局部作用域?

    2024年02月02日
    瀏覽(28)
  • Go 語言變量作用域

    作用域為已聲明標識符所表示的常量、類型、變量、函數(shù)或包在源代碼中的作用范圍。 Go 語言中變量可以在三個地方聲明: 函數(shù)內(nèi)定義的變量稱為局部變量 函數(shù)外定義的變量稱為全局變量 函數(shù)定義中的變量稱為形式參數(shù) 接下來讓我們具體了解局部變量、全局變量和形式參

    2024年02月09日
    瀏覽(18)
  • 【C語言趣味教學(xué)】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    【C語言趣味教學(xué)】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    ??? ?? 【C語言趣味教程】專欄介紹?? 猛戳了解?。。?0x00 引入:什么是作用域? 變量和常量在程序中都是有作用范圍的,這個范圍我們稱之為變量的? 作用域 (scope) 。 作用域也稱為 \\\"定義域\\\",是程序中 定義的變量所存在的區(qū)域,出了該區(qū)域變量就不能被訪問。 變量的作

    2024年02月14日
    瀏覽(19)
  • 【C語言趣味教程】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    【C語言趣味教程】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    ??? ?? 【C語言趣味教程】專欄介紹?? 猛戳了解?。?! 0x00 引入:什么是作用域? 變量和常量在程序中都是有作用范圍的,這個范圍我們稱之為變量的? 作用域 (scope) 。 作用域也稱為 \\\"定義域\\\",是程序中 定義的變量所存在的區(qū)域,出了該區(qū)域變量就不能被訪問。 變量的作

    2024年02月14日
    瀏覽(30)
  • 【C++修煉之路】內(nèi)存管理

    【C++修煉之路】內(nèi)存管理

    ??作者主頁:@安 度 因 ??學(xué)習(xí)社區(qū):StackFrame ??專欄鏈接:C++修煉之路

    2024年02月16日
    瀏覽(24)
  • 第五十四天學(xué)習(xí)記錄:C語言進階:動態(tài)內(nèi)存管理Ⅱ

    第五十四天學(xué)習(xí)記錄:C語言進階:動態(tài)內(nèi)存管理Ⅱ

    1、對NULL指針的解引用操作 2、對動態(tài)開辟的內(nèi)存的越界訪問 3、對非動態(tài)開辟內(nèi)存的free 4、使用free釋放動態(tài)開辟內(nèi)存的一部分 5、對同一塊動態(tài)內(nèi)存多次釋放 6、動態(tài)開辟內(nèi)存忘記釋放(內(nèi)存泄漏) 問:realloc的第一個參數(shù)的指針地址必須是malloc或calloc創(chuàng)建的在堆上的地址嗎?

    2024年02月06日
    瀏覽(27)
  • 第五十三天學(xué)習(xí)記錄:C語言進階:動態(tài)內(nèi)存管理Ⅰ

    問: 棧區(qū)堆區(qū)靜態(tài)區(qū)的大小是固定的嗎?如果棧區(qū)滿了,會向后2者借位置嗎? ChatAI答: 棧區(qū)、堆區(qū)和靜態(tài)區(qū)的大小通常是由操作系統(tǒng)或編譯器預(yù)定義的,不是固定的。這些區(qū)域的大小通常受到多種因素的影響,如系統(tǒng)物理內(nèi)存大小、進程虛擬地址空間的大小、編譯器和操作

    2024年02月06日
    瀏覽(27)
  • C語言變量的作用域,生命周期和鏈接相關(guān)

    本文介紹C語言的三個很重要的概念: 變量的作用域 變量的生命周期 變量或者函數(shù)的鏈接 先介紹一個概念: 翻譯單元 C語言中有兩種文件, 頭文件.h , 代碼文件.c 翻譯單元指的是 包含頭文件,并且將頭文件展開以后的代碼文件.c ,而每個翻譯單元都有一個 文件作用域 ,實

    2024年02月04日
    瀏覽(28)
  • 【C語言趣味教程】(4) 變量:代碼注釋 | 變量的聲明 | 初始化與賦值 | 作用域與生命周期 | 局部變量與全局變量

    【C語言趣味教程】(4) 變量:代碼注釋 | 變量的聲明 | 初始化與賦值 | 作用域與生命周期 | 局部變量與全局變量

    ? ?? 《C語言趣味教程》?? 猛戳訂閱!??! 0x00 引入:注釋的作用 \\\"程序員最討厭兩種人:一種是不寫注釋的人,一種是讓我寫注釋的人。\\\" 相信大家對注釋早已有所耳聞,對于注釋,C 語言有兩種注釋風(fēng)格,我們下面會逐個講解。 ? 但在這之前,我們先來了解了解注釋的作

    2024年02月15日
    瀏覽(27)
  • C語言局部變量與棧內(nèi)存

    C語言局部變量與棧內(nèi)存

    局部變量概念:凡是被一對花括號包含的變量,稱為局部變量 局部變量特點: 某一函數(shù)內(nèi)部的局部變量,存儲在該函數(shù)特定的棧內(nèi)存中 局部變量只能在該函數(shù)內(nèi)可見,在該函數(shù)外部不可見 當(dāng)該函數(shù)退出后,局部變量所占的內(nèi)存立即被系統(tǒng)回收,因此局部變量也稱為臨時變量

    2024年02月19日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包