在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

C程序中棧空間的使用

單片機匠人 ? 來源:單片機匠人 ? 作者:單片機匠人 ? 2022-04-19 14:41 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

審核編輯 :李倩

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

    關注

    3

    文章

    4365

    瀏覽量

    63965
  • 編譯器
    +關注

    關注

    1

    文章

    1653

    瀏覽量

    49776
  • C程序
    +關注

    關注

    4

    文章

    255

    瀏覽量

    36525

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    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 ?316次閱讀
    如何在 樹莓派 上編寫和運行 <b class='flag-5'>C</b> 語言<b class='flag-5'>程序</b>?

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

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

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

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

    KT142C語音芯片內置的320Kbyte空間不夠,還有其他方案嗎?

    這里詳細描述一下,為什么是320Kbyte 因為KT142C芯片內置空間實際是512K,其中有一部分是拿來存儲程序固件,還有一部分作為記憶存儲空間,剩下的
    的頭像 發表于 02-19 10:24 ?266次閱讀
    KT142<b class='flag-5'>C</b>語音芯片內置的320Kbyte<b class='flag-5'>空間</b>不夠,還有其他方案嗎?

    λ-IO:存儲計算下的IO設計

    動機和背景? ? 存儲計算存儲資源的充分利用。IO是管理存儲器的的基本組件,包括設備驅動、塊接口層、文件系統,目前一些用戶空間IO庫(如SPDK)有效降低了延遲,但是io仍然不可或缺。這是因為1
    的頭像 發表于 12-02 10:35 ?499次閱讀
    λ-IO:存儲計算下的IO<b class='flag-5'>棧</b>設計

    AWTK-WEB 快速入門(1) - C 語言應用程序

    導讀AWTK可以使用相同的技術開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用C語言開發AWTK-WEB應用程序。用AWTKDesigner新建
    的頭像 發表于 11-27 11:46 ?556次閱讀
    AWTK-WEB 快速入門(1) - <b class='flag-5'>C</b> 語言應用<b class='flag-5'>程序</b>

    簡述大前端技術的渲染原理

    應用開發:Android、iOS、鴻蒙(HarmonyOS)等; ?Web前端框架:Vue、React、Angular等; ?小程序開發:微信小程序、京東小程序、支付寶小程序等; ?跨
    的頭像 發表于 11-07 10:11 ?522次閱讀

    使用OpenVINO GenAI API在C++構建AI應用程序

    許多桌面應用程序是使用 C++ 開發的,而將生成式AI(GenAI)功能集成到這些應用程序可能會很具有挑戰性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復
    的頭像 發表于 10-12 09:36 ?901次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C</b>++<b class='flag-5'>中</b>構建AI應用<b class='flag-5'>程序</b>

    Linux網絡協議的實現

    網絡協議是操作系統核心的一個重要組成部分,負責管理網絡通信中的數據包處理。在 Linux 操作系統,網絡協議(Network Stack)負責實現 TCP/IP 協議簇,處理應用程序
    的頭像 發表于 09-10 09:51 ?538次閱讀
    Linux網絡協議<b class='flag-5'>棧</b>的實現

    linux驅動程序運行在什么空間

    Linux 驅動程序是操作系統的一部分,負責管理硬件設備與操作系統之間的交互。驅動程序運行在內核空間(Kernel Space),這是操作系統的核心部分,與用戶空間(User Spac
    的頭像 發表于 08-30 14:37 ?731次閱讀

    技術干貨驛站 ▏深入理解C語言:掌握程序結構知識

    在計算機編程的世界C語言被廣泛認可為一門強大而高效的編程語言,其簡潔的語法和直接的指令使得它成為了許多程序員的首選。了解C語言的程序結構
    的頭像 發表于 07-27 08:45 ?1721次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b>語言:掌握<b class='flag-5'>程序</b>結構知識

    最簡單的C程序設計

    電子發燒友網站提供《最簡單的C程序設計.pptx》資料免費下載
    發表于 05-28 16:41 ?10次下載

    請問FW OTA二進制文件是否包含應用程序和BT/程序庫?

    你好,先生: 因為英飛凌仍在不斷更新 BT 和庫。 那么 如果客戶在第一個版本中有 OTA 功能。 FW OTA 二進制文件是否包含應用程序和 BT /程序庫?
    發表于 05-20 07:28
    主站蜘蛛池模板: 国产综合在线视频 | 美女被日出白浆 | 日本黄色一级网站 | 日本zzzwww大片免费 | 日韩免费高清一级毛片在线 | 欧美一级在线免费观看 | 国产精品视频久久久久 | 夜夜精品视频一区二区 | 四虎影院免费在线播放 | 又粗又爽又色男女乱淫播放男女 | 色一乱一伦一区一直爽 | 免费高清在线观看a网站 | 8888奇米四色在线 | 国产操比视频 | 日本一区二区在线视频 | 黄色网在线 | 免费观看视频在线 | 午夜看片a福利在线 | 国产伦精品一区二区三区免费 | 久久88色综合色鬼 | 高清一区二区 | 好爽毛片一区二区三区四区 | 日韩三级毛片 | 99久久免费精品国产免费高清 | 在线观看永久免费 | 亚洲婷婷国产精品电影人久久 | 成人看的一级毛片 | 免费手机黄色网址 | 99久久综合给久久精品 | 亚洲 另类 在线 欧美 制服 | 亚洲视频在线不卡 | 午夜影院0606 | 欧美激情区 | 日本黄色站 | 国产男女免费视频 | 香蕉午夜视频 | 欧美福利片在线观看 | 毛片多多 | 天天狠天天操 | 久久人人爽爽爽人久久久 | 激情五月婷婷基地 |