C語言 記憶體分區

来源:https://www.cnblogs.com/see-dream/archive/2023/02/28/c.html
-Advertisement-
Play Games

C語言對記憶體的使用劃分為以下區域: 棧區(stack)、堆區(heap)、全局區(靜態區)、常量區、代碼區。 棧區: 由編譯器自動分配釋放,按記憶體地址從高(地址)到低(地址)存儲; 棧區內容的作用域為其所定義的函數內,生命周期為函數執行期間,函數結束自動釋放; 存放局部變數、const局部變數、函數 ...


C語言對記憶體的使用劃分為以下區域:

棧區(stack)、堆區(heap)、全局區(靜態區)、常量區、代碼區。

  • 棧區

    • 由編譯器自動分配釋放,按記憶體地址從高(地址)到低(地址)存儲;
    • 棧區內容的作用域為其所定義的函數內,生命周期為函數執行期間,函數結束自動釋放;
    • 存放局部變數const局部變數、函數調用時的入口參數返回值
    • 棧區內容先進後出;
  • 堆區

    • 堆區記憶體由程式員管理,堆區空間申請後使用(申請時註意保存地址,防止記憶體泄漏),用完後一定及時手動釋放,防止記憶體泄漏;
    • 堆區存儲由低地址向高地址存儲,內容可讀可寫;
    • 申請方法:

    void *malloc(size_t size);
    void free(void *ptr);
    void *calloc(size_t nmemb, size_t size);
    void *realloc(void *ptr, size_t size);

  • 全局(靜態)區

    • 由系統管理,全局(靜態)區內容的生命周期為整個程式運行期間;
    • 存放全局變數和static修飾的靜態變數(包括靜態全局變數靜態局部變數);初始化的放在一塊,未初始化的放在一塊;
    • 全局變數和靜態全局變數的作用域均為全局,但其他源文件可以通過extern關鍵字聲明之後引用全局變數,而不能引用靜態全局變數
    • 靜態局部變數只在其定義函數內可見;
  • 常量區

    • 由系統管理,存放常量,const全局變數,只讀;
  • 代碼區

    • 由系統管理,存放程式的二進位代碼,只讀;

分區圖示

參考文章:
C語言:記憶體分配---棧區、堆區、全局區、常量區和代碼區
c語言中的五種記憶體分區-筆記
c語言記憶體分區-(堆,棧,全局/靜態存儲區,自由存儲區,代碼區)與可執行程式的三段-(Text段,Date段,Bss段)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 在前陣子我就已經接入了釘釘的群機器人和工作消息推送,一直沒寫文章同步到給大家。 像這種接入渠道的工作,雖然我沒接入過,但可預見性地就是看看官方文檔,然後對著文檔一頓學習,複製下接入的代碼,然後調試,最後就 ...
  • VL33 非整數倍數據位寬轉換8to12 和上一題一樣的,註意valid_out輸出時加一個valid_in(其實32題也要加,不過不加模擬也能過)。 `timescale 1ns/1ns module width_8to12( input clk , input rst_n , input val ...
  • 歡迎關註個人公眾號:愛喝可可牛奶 LeetCode演算法訓練-回溯總結 適用問題 組合問題:N個數裡面按一定規則找出k個數的集合 排列問題:N個數按一定規則全排列,有幾種排列方式 切割問題:一個字元串按一定規則有幾種切割方式 子集問題:一個N個數的集合里有多少符合條件的子集 棋盤問題:N皇後,解數獨等 ...
  • if條件語句 if語句 if條件語法結構: if 條件語句: 滿足條件運行的代碼1 滿足條件運行的代碼2 ... ps:條件語句(可以是單個數據,即本身就是布爾類型)需返回一個布爾類型,判斷是否進入條件分支語句 if True: print('條件成⽴執⾏的代碼1') print('條件成⽴執⾏的代 ...
  • Lambda表達式 Lambda表達式理解 Lambda表達式是Jdk 8 開始新增的一種語法形式;作用:用於簡化匿名內部類的代碼寫法 註意:Lambda表達式只能簡化函數式介面的匿名內部類!!! 什麼是函數式介面? 有且僅有一個抽象方法的介面。 註意:大部分函數式介面,上面可能會有一個@Funct ...
  • 本節開始,將對 ResourceManager 中一些常見行為進行分析探究,看某些具體關鍵的行為,在 RM 中是如何流轉的。本節將深入源碼探究「啟動 ApplicationMaster」的具體流程。 ...
  • 錯誤描述 在 Spring Cloud 項目中通過 Open Feign 遠程調用時出現如下錯誤: feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http ...
  • 之前在做某個業務中,寫了個文件傳輸的程式,程式邏輯很簡單:掃描某個目錄下的文件,對文件進行一些處理,然後把文件移動到另一個目錄。 此前在大多數運行環境里,該程式一直正常運行,直到最近在一個新環境下,出現問題:文件移動失敗。查詢日誌發現在調用file.renameTo方法返回false。我第一反應是查 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...