精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言程序的動態內存中棧內存區域的概念

電子工程師 ? 來源:單片機匠人 ? 作者:蔡琰老師 ? 2021-06-29 10:34 ? 次閱讀

C語言程序的動態內存分為棧內存區域和堆內存區域兩種。棧內存是由編譯器管理的,而堆內存是由程序調用具體的庫函數管理的。我們今天分析下棧內存的概念。

棧內存的使用在很大程度上依賴于處理器硬件機制。在處理器中,一般有一個寄存器來表示當前棧指針的位置,通常在內存中分配一塊區域,這塊內存的上界(高內存地址)和下界(低內存地址)之間是可用的棧內存區域。

棧指針是一個指向棧區域內部的指針,也就是它的值是一個地址,這個地址位于棧區的下界和棧區的上界之間。棧指針把這個棧區域分為兩個部分,一個是已經使用的區域,一個是沒有使用的區域。

對于棧內存的增長方向有兩種:一種是向上增長的,也就是低地址向高地址增長;另一個是向下增長的,高地址向低地址增長。在目前常見的體系結構和編譯系統中,棧大多是向下增長的,我們也是看下這種常見的增長形式。在初始階段,棧指針是指向棧區間的上界。隨著棧使用量的增加,棧指針的值將向低地址移動,也就是在變小。

棧內存在使用過程中有一個重要的特性是先入后出,也就是后入棧的內容將先出棧,而先入棧的后出棧。類似于一個口的瓶子,先進去的在底下,要想底下的出來就先把上面的先倒出來。

入棧的過程和出棧的過程我們安全用圖形來表示,更形象些吧~

在入棧的過程中,如果棧指針的變化超出棧內存的區域,將發生棧溢出。

從圖中看出棧指針的功能是標識當前的棧位置。對棧內存處理中,每次能夠獲取的內容都是最后可放入棧內存的內容,而每次放入棧內存中的內容都將位于棧區域的最后。

總的來說其實棧是一個先入后出的內存區域,棧指針是提供一種硬件的內存機制。

還有一個大家可能都沒聽說過,或者都沒關注過的,我們來一起了解一下,就是滿棧和空棧的概念,我們還是通過圖來形容一下,這個是由處理器的體系結構決定的。與程序的編寫沒有關系,甚至編譯器都不需要關注這個問題。無論在哪種情況下,棧指針都是已經使用的棧區域和未使用的棧區域的分界線。

在滿棧的情況:棧指針當前的位置是已經使用的棧區域。

在空棧的情況:棧指針當期的位置是沒有使用的棧區域。

這個僅供大家了解下就可以了,畢竟對于我們大多數人來說都是應用者,多了解點底層的總沒錯,但也不必太深挖。對于棧內存的概念我就分享到這里,其實這個對于寫匯編的人來說就很有用處了,或者去多讀一些匯編就很能清楚棧內存的妙用了。

后續我分享堆內存的一些概念,話說知識是一點點積累的過程,有時候覺得前面有的知識點懵懵懂懂的突然連起來就又通透了。這就是堅持學習的作用,希望大家都能堅持多學,才能更會用。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136184
  • 程序
    +關注

    關注

    116

    文章

    3776

    瀏覽量

    80848

原文標題:C語言中的動態內存-----棧內存

文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機匠人】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    解讀版|Air780E軟件C語言內存數組的神秘面紗!

    今天我們來揭開Air780E 軟件 C 語言內存數組的神秘面紗,希望有所收獲。
    的頭像 發表于 11-17 10:00 ?153次閱讀
    解讀版|Air780E軟件<b class='flag-5'>中</b><b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>數組的神秘面紗!

    你知道嗎? 51單片機也有動態內存分配

    一、簡述其實在51單片機也可以使用動態內存,動態內存其實就是劃出一塊內存區域,將這塊內存進行管
    的頭像 發表于 04-26 08:10 ?1362次閱讀
    你知道嗎? 51單片機也有<b class='flag-5'>動態內存</b>分配

    探索推理時KV Cache的動態內存壓縮方法

    DMC通過一個決策變量(α)來有效地對輸入序列進行分段,每個段落可以獨立地決定是繼續追加還是進行累積。這允許模型在不同段落之間動態調整內存使用。
    發表于 03-22 09:16 ?836次閱讀
    探索推理時KV Cache的<b class='flag-5'>動態內存</b>壓縮方法

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,內存不存在內存泄漏問題,因為
    發表于 03-19 11:38 ?482次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>泄漏問題原理

    C語言的指針用法

    C語言編程善用指針可以簡化一些任務的處理,而對于一些任務(比如動態內存分配),必須要有指針才行的。也就是說精通C指針編程是很有必要的,幫助
    發表于 03-05 14:22 ?320次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的指針用法

    C語言中的動態內存管理講解

    本章將講解 C 動態內存管理。C 語言內存的分配和管理提供了幾個函數。這些函數可以在
    的頭像 發表于 02-23 14:03 ?375次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的<b class='flag-5'>動態內存</b>管理講解

    C語言:指針內存是如何存放變量

    程序定義一個變量,那么在程序編譯的過程,系統會根據你定義變量的類型來分配「相應尺寸」的內存空間。那么如果要使用這個變量,只需要用變量名
    發表于 01-08 10:14 ?409次閱讀

    FreeRTOS內存機制詳解

    FreeRTOS是一種實時操作系統,它提供了多種內存分配方式,包括動態內存分配和靜態內存分配。
    的頭像 發表于 12-31 16:49 ?2545次閱讀
    FreeRTOS<b class='flag-5'>內存</b>機制詳解

    weblogic設置jvm內存大小

    如何設置WebLogic服務器的JVM內存大小。 一、了解JVM內存 JVM(Java Virtual Machine)是Java應用程序的運行環境。JVM使用一個被稱為堆(Heap)的內存
    的頭像 發表于 12-05 14:44 ?2972次閱讀

    jvm配置堆內存初始值參數

    JVM(Java Virtual Machine)是Java語言的運行環境,它通過解釋字節碼并執行相應的指令來運行Java程序。在JVM,堆(Heap)是用于存儲對象實例的內存
    的頭像 發表于 12-05 14:17 ?738次閱讀

    java虛擬機內存包括遠空間內存

    Java虛擬機(JVM)內存是Java程序執行時所使用的內存空間的總稱,包括了Java堆、方法區、本地方法、虛擬機
    的頭像 發表于 12-05 14:15 ?379次閱讀

    jvm內存區域中,哪一塊是屬于線程共享

    是如何劃分的。JVM內存區域主要分為以下幾個部分:程序計數器、Java虛擬機、本地方法、堆、方法區和運行時常量池。其中,
    的頭像 發表于 12-05 14:14 ?1320次閱讀

    jvm內存區域由哪幾部分組成

    JVM(Java Virtual Machine)是Java程序運行的環境,在JVM存在著多個不同功能的內存區域。這些內存
    的頭像 發表于 12-05 14:10 ?786次閱讀

    jvm運行時內存區域劃分

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是Java編程語言的運行環境。JVM的主要功能是將Java源代碼轉換為機器代碼,并且在運行時管理Java程序內存。JVM
    的頭像 發表于 12-05 14:08 ?504次閱讀

    jvm內存模型和內存結構

    JVM(Java虛擬機)是Java程序的運行平臺,它負責將Java程序轉換成機器碼并在計算機上執行。在JVM,內存模型和內存結構是兩個重要
    的頭像 發表于 12-05 11:08 ?893次閱讀