国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

電子工程師 ? 來源:單片機匠人 ? 作者:蔡琰老師 ? 2021-06-29 10:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

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

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

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

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

編輯:jq

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

    關注

    183

    文章

    7644

    瀏覽量

    145569
  • 程序
    +關注

    關注

    117

    文章

    3846

    瀏覽量

    85232

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    容易造成單片機內存溢出的幾個陷阱介紹

    關于程序變量和內存分配,都是需要我們時刻關注的問題。我相信有不少人在這塊犯過很多的錯誤,也可能說明我們基礎不夠扎實,編寫程序的習慣也不夠好。 總結一下關于程序的變量和
    發表于 01-23 07:25

    keilc語言動態分配內存

    C程序,通常將內存劃分為以下六個區域: (1)內核區域。這塊
    發表于 01-21 06:04

    【「Linux 設備驅動開發(第 2 版)」閱讀體驗】+讀深入理解Linux內核內存分配

    成內核空間和用戶空間,32位系統的內核地址空間有低端與高端之分。部分內存可以直接由內核訪問,稱為低端內存;而內存未被永久映射覆蓋的部分稱
    發表于 01-16 20:05

    C語言嵌入式系統編程注意事項-內存操作

    技巧。掌握并深入理解關于數據指針、函數指針、動態申請內存、const及volatile關鍵字等的相關知識,是一個優秀的C語言程序設計師的基本
    發表于 01-04 07:31

    嵌入式C語言中各變量存儲位置

    C語言程序,對變量的使用還有以下幾點需要注意 1. 體定義的變量通常是在上,不需要在
    發表于 12-25 07:54

    三種類型內存的使用

    自動存儲:用于保存局部變量。當函數被調用時,就會創建一個新的自動存儲區域,并在函數返回結果時刪除。只有返回值會被保留,并被復制到調用它的函數的自動存儲。這意味著,返回一個指向局部變量的指針是不安全
    發表于 12-12 06:43

    C語言內存池使用

    C語言內存管理,從來都是一個讓人頭禿的問題。要想更自由地管理內存,就必須去堆申請,然后還需要考慮何時釋放,萬一釋放不當,或者沒有及時釋放
    發表于 12-11 07:57

    C語言的編程技巧

    一個成員是一個未知大小的數組,適用于動態分配內存并關聯一個可變長度的數組。? ?3、匿名結構體和聯合體?:C語言允許在結構體或聯合體定義不
    發表于 11-27 06:46

    為什么單片機很少使用malloc,而PC程序頻繁使用呢?

    程序的影響。 操作系統的支持單片機:在許多單片機應用,程序運行不依賴于復雜的操作系統,而是基于裸機或輕量級實時操作系統(RTOS)來進行管理。裸機系統往往沒有內存管理單元(MMU
    發表于 11-20 06:55

    靈活高效ZBUFF — C內存數據操作庫:優化內存管理的利器

    C語言開發,高效的內存管理是提升程序性能的關鍵。ZBUFF作為一款靈活高效的內存數據操作庫,
    的頭像 發表于 08-14 18:01 ?691次閱讀
    靈活高效ZBUFF — <b class='flag-5'>C</b><b class='flag-5'>內存</b>數據操作庫:優化<b class='flag-5'>內存</b>管理的利器

    靈活高效雙引擎驅動:ZBUFF讓C語言內存操作更智能!

    高性能系統。 一、ZBUFF核心庫常用函數 如果小伙伴們此前沒有接觸過C語言或者不精通C語言,把ZBUFF核心庫當成新庫來學習即可,建議先從熟悉相關函數的功能及其參數意義入手。 感興趣
    的頭像 發表于 08-11 13:27 ?588次閱讀
    靈活高效雙引擎驅動:ZBUFF讓<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>操作更智能!

    IEC61508系統動態內存使用

    IEC 61508標準強烈推薦使用靜態內存管理方式。在安全應用設計,我們都在遵循這個建議。
    的頭像 發表于 04-11 15:17 ?1393次閱讀
    IEC61508系統<b class='flag-5'>中</b>的<b class='flag-5'>動態內存</b>使用

    如何使用LAX_CODEGEN啟用動態內存分配?

    我目前正在探索NXP_MBDToolbox_LAX。lax_codegen 生成的代碼基于靜態分配。我想管理大型向量,如何使用 LAX_CODEGEN 啟用動態內存分配?
    發表于 04-10 08:09

    C語言中結構體與聯合體的深度解析:內存布局與應用場景

    一、基礎概念與核心差異 1.1 結構體(Struct)的本質 **結構體是C語言中實現數據封裝的基石,其核心特征在于內存獨立性。每個成員變量在內存
    發表于 04-08 09:18

    快速搞懂C語言程序內存分區!

    程序運行過程,操作系統會根據程序的需要,將內存劃分為多個功能不同的區段,以便更高效地管理內存資源和確保
    的頭像 發表于 03-14 17:37 ?1565次閱讀
    快速搞懂<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>程序</b><b class='flag-5'>內存</b>分區!