溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何應(yīng)用C語言變量的內(nèi)存排布

發(fā)布時(shí)間:2020-06-17 16:18:55 來源:億速云 閱讀:234 作者:元一 欄目:系統(tǒng)運(yùn)維

一個(gè)典型的C程序存儲(chǔ)分區(qū)包含以下幾類:

  1. Text段
  2. 已初始化數(shù)據(jù)段
  3. 未初始化數(shù)據(jù)段

之前對(duì)C語言的變量在內(nèi)存中的排布有些混淆,故進(jìn)行了以下幾個(gè)方面的簡(jiǎn)要整理(所有的實(shí)例均是基于X86 PC Ubuntu上GCC編譯的)。

  1. 變量定義時(shí),不同的變量分配的內(nèi)存地址的增長(zhǎng)方向
    (1) 定義兩個(gè)全局變量,在賦值編譯后打印其在內(nèi)存中分配的地址,發(fā)現(xiàn)先定義的變量被分配在內(nèi)存中的低地址中
    如何應(yīng)用C語言變量的內(nèi)存排布
    如何應(yīng)用C語言變量的內(nèi)存排布
    (2) X86 PC Ubuntu的main函數(shù)中定義變量,使用gcc編譯時(shí)查看系統(tǒng)對(duì)變量分配的內(nèi)存地址(內(nèi)存分配的增長(zhǎng)方向是低地址到高地址)
    如何應(yīng)用C語言變量的內(nèi)存排布
  2. 結(jié)構(gòu)體實(shí)例化之后,結(jié)構(gòu)體中成員分配的內(nèi)存地址的增長(zhǎng)方向
    (1) 定義全局結(jié)構(gòu)體且初始化,gcc編譯后查看結(jié)構(gòu)體成員內(nèi)存分配的增長(zhǎng)方向(內(nèi)存分配的增長(zhǎng)方向是由低向高向上增長(zhǎng))
    如何應(yīng)用C語言變量的內(nèi)存排布
    (2) 在main函數(shù)中對(duì)結(jié)構(gòu)體且初始化,gcc編譯后查看結(jié)構(gòu)體成員內(nèi)存分配的增長(zhǎng)方向(內(nèi)存分配的增長(zhǎng)方向是由低向高向上增長(zhǎng))
    如何應(yīng)用C語言變量的內(nèi)存排布
  3. 函數(shù)中定義變量時(shí),使用的??臻g的內(nèi)存的增長(zhǎng)方向
    如何應(yīng)用C語言變量的內(nèi)存排布
  4. arm在使用arm交叉編譯工具鏈時(shí),一般的變量的內(nèi)存分配是向上增長(zhǎng)方向的,但是對(duì)于棧上的內(nèi)存分配時(shí)采用的滿減棧的方式對(duì)棧上內(nèi)存分配給變量使用的,棧的生長(zhǎng)方向時(shí)向下生長(zhǎng)方向的.
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI