91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C程序中??臻g的使用

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

掃碼添加小助手

加入工程師交流群

C語言程序中,??臻g是由編譯器管理的,在程序中可以體現(xiàn)??臻g使用的例子是參數(shù)的傳遞、返回值的使用以及自動變量的空間。

在運(yùn)行程序的系統(tǒng)中,棧空間是從高地址向低地址增長的。在程序的執(zhí)行結(jié)果中打印參數(shù)的地址就可以看到參數(shù)地址的關(guān)系。

參數(shù)入棧的順序是:后面的參數(shù)在高地址處,前面的參數(shù)在低地址處。事實(shí)上,進(jìn)入函數(shù)后,第一個參數(shù)將位于??臻g的最后。因此,程序在按照順序訪問參數(shù)的時候,還是從低地址到高地址的訪問。注意:具體參數(shù)將占用多大的棧區(qū)域空間,將由編譯器決定,因?yàn)槿霔V暗臈V羔樅腿霔V蟮臈V羔樦g的內(nèi)容不一定和參數(shù)大小的和一致。

在函數(shù)退出之后,棧指針將返回到函數(shù)進(jìn)入之前的位置。從上面我們得出,在函數(shù)調(diào)用的過程中,每增加一個層次,都會讓程序需要更大的??臻g。

事實(shí)上,在函數(shù)的調(diào)用過程中,參數(shù)和返回值都將使用??臻g。??臻g的具體規(guī)模是和編譯器有關(guān)系的,可以確定的一點(diǎn)是:一般參數(shù)入棧后,前面的參數(shù)將位于內(nèi)存的低地址,后面的參數(shù)將位于內(nèi)存的高地址。

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

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

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

關(guān)于??臻g的使用,完全是由編譯器來處理的,在程序中不需要管理棧。當(dāng)函數(shù)退出之后,函數(shù)棧上的內(nèi)容將被釋放,因此,在函數(shù)跳出后,函數(shù)棧上的內(nèi)容是不能被別的函數(shù)使用的。

內(nèi)層函數(shù)可以使用外層函數(shù)的棧內(nèi)存,但是外層函數(shù)不能使用內(nèi)層函數(shù)的棧內(nèi)存。

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

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67504
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51600
  • C程序
    +關(guān)注

    關(guān)注

    4

    文章

    255

    瀏覽量

    37622

原文標(biāo)題:C程序中??臻g的使用

文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機(jī)匠人】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    keilc語言的動態(tài)分配內(nèi)存

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

    RDMA設(shè)計12:融合以太網(wǎng)協(xié)議設(shè)計1

    RDMA 隊列并實(shí)現(xiàn) RDMA 指令提交與完成機(jī)制。在 RoCE v2 高速數(shù)據(jù)傳輸系統(tǒng),用戶通過配置系統(tǒng)控制模塊的寄存器或寄存器組來實(shí)現(xiàn)隊列管理和數(shù)據(jù) DMA 請求。融合以太網(wǎng)協(xié)議在獲取相關(guān)指令
    發(fā)表于 12-25 11:39

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

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

    EtherCAT主站協(xié)議EC-Master在ROS(機(jī)器人操作系統(tǒng))的應(yīng)用

    EtherCAT主站協(xié)議EC-Master在ROS(機(jī)器人操作系統(tǒng))的應(yīng)用
    的頭像 發(fā)表于 12-10 14:46 ?460次閱讀
    EtherCAT主站協(xié)議<b class='flag-5'>棧</b>EC-Master在ROS(機(jī)器人操作系統(tǒng))<b class='flag-5'>中</b>的應(yīng)用

    Stack到底用來干嘛的呢?

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

    堆和的區(qū)別

    一個由C/C 編譯的程序占用的內(nèi)存分為以下幾個部分: 區(qū)(stack):由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 11-27 18:13 ?1079次閱讀

    C語言程序的結(jié)構(gòu)

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

    在Keil5查看大小

    1、修改啟動文件: 方法說明:大小通常在啟動文件定義??梢酝ㄟ^直接修改這個文件的Stack_Size變量來調(diào)整大小。 操作步驟:找到對應(yīng)的啟動文件,定位到Stack_Size的
    發(fā)表于 11-14 06:32

    如何在應(yīng)用程序調(diào)試期間分析和堆使用情況

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

    使用RT-Thread Studio在程序進(jìn)Hardfault時怎么方便的查看調(diào)用?

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

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

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

    C語言的歷史及程序介紹

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

    使用RT-Thread Studio在程序進(jìn)Hardfault時怎么方便的查看調(diào)用?

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

    如何在 樹莓派 上編寫和運(yùn)行 C 語言程序

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

    快速搞懂C語言程序內(nèi)存分區(qū)!

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