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

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

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

3天內不再提示

C程序中棧空間的使用

單片機匠人 ? 來源:單片機匠人 ? 作者:單片機匠人 ? 2022-04-19 14:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言程序中,棧空間是由編譯器管理的,在程序中可以體現棧空間使用的例子是參數的傳遞、返回值的使用以及自動變量的空間。

在運行程序的系統中,棧空間是從高地址向低地址增長的。在程序的執行結果中打印參數的地址就可以看到參數地址的關系。

參數入棧的順序是:后面的參數在高地址處,前面的參數在低地址處。事實上,進入函數后,第一個參數將位于棧空間的最后。因此,程序在按照順序訪問參數的時候,還是從低地址到高地址的訪問。注意:具體參數將占用多大的棧區域空間,將由編譯器決定,因為入棧之前的棧指針和入棧之后的棧指針之間的內容不一定和參數大小的和一致。

在函數退出之后,棧指針將返回到函數進入之前的位置。從上面我們得出,在函數調用的過程中,每增加一個層次,都會讓程序需要更大的棧空間。

事實上,在函數的調用過程中,參數和返回值都將使用棧空間。棧空間的具體規模是和編譯器有關系的,可以確定的一點是:一般參數入棧后,前面的參數將位于內存的低地址,后面的參數將位于內存的高地址。

在程序中,函數內部使用的自動變量也是保存在棧區域的。編譯器在處理自動變量的時候,將在參數棧區的后面為自動變量分配棧區域。棧的開辟順序和參數的順序是一致的。

編譯器只會為函數內部的自動變量在棧上開辟空間,如果函數內部的變量改為靜態變量,這個時候編譯器就不會為這個變量在棧上開辟空間了,而是將它放入靜態的存儲區內。

程序中使用的自動局部變量和參數的類型都是C語言的基本類型,在32位的系統中,int為32位(4字節),這種變量類型將占用4個字節的棧空間。在程序中,可能使用較大的棧空間的變量類型是結構體和數組。

關于棧空間的使用,完全是由編譯器來處理的,在程序中不需要管理棧。當函數退出之后,函數棧上的內容將被釋放,因此,在函數跳出后,函數棧上的內容是不能被別的函數使用的。

內層函數可以使用外層函數的棧內存,但是外層函數不能使用內層函數的棧內存。

自動變量的地址不可以作為函數返回值,但是可以作為參數傳遞給其他函數。

審核編輯 :李倩

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

    關注

    3

    文章

    4417

    瀏覽量

    67499
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

    51590
  • C程序
    +關注

    關注

    4

    文章

    255

    瀏覽量

    37621

原文標題:C程序中棧空間的使用

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    keilc語言的動態分配內存

    C程序,通常將內存劃分為以下六個區域: (1)內核區域。這塊區域是操作系統的,用戶不能使用。 (2)區。主要用于存放運行函數而分配的局部變量、函數參數、返回數據、返回地址等。
    發表于 01-21 06:04

    RDMA設計12:融合以太網協議設計1

    RDMA 隊列并實現 RDMA 指令提交與完成機制。在 RoCE v2 高速數據傳輸系統,用戶通過配置系統控制模塊的寄存器或寄存器組來實現隊列管理和數據 DMA 請求。融合以太網協議在獲取相關指令
    發表于 12-25 11:39

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

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

    EtherCAT主站協議EC-Master在ROS(機器人操作系統)的應用

    EtherCAT主站協議EC-Master在ROS(機器人操作系統)的應用
    的頭像 發表于 12-10 14:46 ?457次閱讀
    EtherCAT主站協議<b class='flag-5'>棧</b>EC-Master在ROS(機器人操作系統)<b class='flag-5'>中</b>的應用

    Stack到底用來干嘛的呢?

    我們在函數的局部變量、數組這些不能超過1K(含嵌套的函數),否則程序就會崩潰進入hardfaul。 除了這些局部變量以外,還有一些實時操作系統的現場保護、返回地址都是存儲在里面。 還有一點題外話,就是的增長方向是從高地址到低
    發表于 12-01 08:04

    堆和的區別

    一個由C/C 編譯的程序占用的內存分為以下幾個部分: 區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構
    的頭像 發表于 11-27 18:13 ?1078次閱讀

    C語言程序的結構

    ,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用C語言作為主要的開發語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊(或稱任務,以下統稱任務
    發表于 11-26 08:12

    在Keil5查看大小

    1、修改啟動文件: 方法說明:大小通常在啟動文件定義。可以通過直接修改這個文件的Stack_Size變量來調整大小。 操作步驟:找到對應的啟動文件,定位到Stack_Size的
    發表于 11-14 06:32

    如何在應用程序調試期間分析和堆使用情況

    ,并在 Unified IDE 仍可使用。本文涵蓋了如何在 Vitis 中使用分析工具在應用程序調試期間對和堆進行監控。
    的頭像 發表于 10-24 16:54 ?888次閱讀
    如何在應用<b class='flag-5'>程序</b>調試期間分析<b class='flag-5'>棧</b>和堆使用情況

    使用RT-Thread Studio在程序進Hardfault時怎么方便的查看調用

    求助各位大神 使用RT-Thread Studio在程序進Hardfault時怎么方便的查看調用 使用MDK的時候可以方便的看調用堆棧,從而很快速的找到問題,使用RT-Thread Studio該如何快速找到問題呢
    發表于 10-10 06:54

    自動駕駛中常提的“全”是個啥?有必要“全”嗎?

    和應用,涵蓋從底層硬件、感知算法、高精地圖、定位與融合,到決策規劃、控制執行、軟件平臺,乃至整車集成與云端服務的完整鏈條。對于希望在激烈的市場競爭占據一席之地的車企和科技公司來說,全似乎代表了掌握核心競爭
    的頭像 發表于 08-27 09:43 ?1136次閱讀
    自動駕駛中常提的“全<b class='flag-5'>棧</b>”是個啥?有必要“全<b class='flag-5'>棧</b>”嗎?

    C語言的歷史及程序介紹

    電子發燒友網站提供《C語言的歷史及程序介紹.pdf》資料免費下載
    發表于 04-09 16:10 ?0次下載

    使用RT-Thread Studio在程序進Hardfault時怎么方便的查看調用

    使用RT-Thread Studio在程序進Hardfault時怎么方便的查看調用 使用MDK的時候可以方便的看調用堆棧,從而很快速的找到問題,使用RT-Thread Studio該如何快速找到問題呢
    發表于 04-01 07:32

    如何在 樹莓派 上編寫和運行 C 語言程序

    在本教程,我將討論C編程語言是什么,C編程的用途,以及如何在RaspberryPi上編寫和運行C程序。本文的目的是為您介紹在Raspber
    的頭像 發表于 03-25 09:28 ?1155次閱讀
    如何在 樹莓派 上編寫和運行 <b class='flag-5'>C</b> 語言<b class='flag-5'>程序</b>?

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

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