文章編號:11672時間:2024-10-01人氣:
五大內存分區 在C++中,內存分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變量的存儲區。 里面的變量通常是局部變量、函數參數等。 堆,就是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。 如果程序員沒有釋放掉,那么在程序結束后,操作系統會自動回收。 自由存儲區,就是那些由malloc等分配的內存塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。 全局/靜態存儲區,全局變量和靜態變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區分了,他們共同占用同一塊內存區。 常量存儲區,這是一塊比較特殊的存儲區,他們里面存放的是常量,不允許修改
在 C 語言中,內存分配方式有以下三種形式:1、從靜態存儲區域分配由編譯器自動分配和釋放,在程序編譯的時候就已經分配好內存,這塊內存在程序的整個運行期間都存在,直到整個程序運行結束時才被釋放,如全局變量與 static 變量。 2、在棧上分配同樣由編譯器自動分配和釋放,在函數執行時,函數內部的局部變量都可以在棧上創建,函數執行結束時,這些存儲單元將則被自動釋放。 需要注意的是,棧內存分配運算內置于處理器的指令集中,它的運行效率一般很高,但是分配的內存容量有限。 3、從堆上分配也稱為動態內存分配,由程序員手動完成申請和釋放。 程序在運行的時,由程序員使用內存分配函數(如 malloc 函數)來申請內存,使用完之后再由程序員自己負責使用內存釋放函數(如 free 函數)來釋放內存。 需要注意的是,如果在堆上分配了內存空間,就必須及時釋放它,否則將會導致運行的程序出現內存泄漏等錯誤。 在 C 語言中,不同類型變量的存儲位置和作用域也有所不同。 全局變量從靜態存儲區域分配,其作用域是全局作用域,也就是整個程序的生命周期內都可以使用。 如果程序是由多個源文件構成的,那么全局變量只要在一個文件中定義,就可以在其他所有的文件中使用,但必須在其他文件中通過使用extern關鍵字來聲明該全局變量。 全局靜態變量從靜態存儲區域分配,其生命周期也是與整個程序同在的,從程序開始到結束一直起作用。 與全局變量不同的是,全局靜態變量作用域只在定義它的一個源文件內,其他源文件不能使用。 局部變量從棧上分配,其作用域只是在局部函數內,在定義該變量的函數內,只要出了該函數,該局部變量就不再起作用,也即該變量的生命周期和該函數同在。 局部靜態變量從靜態存儲區域分配,其在第一次初始化后就一直存在直到程序結束。 該變量的特點是其作用域只在定義它的函數內可見,出了該函數就不可見了。
全局變量是編程術語中的一種,源自于變量之分。 \x0d\x0a變量分為局部與全局,局部變量又可稱之為內部變量。 由某對象或某個函數所創建的變量通常都是局部變量,只能被內部引用,而無法被其它對象或函數引用。 \x0d\x0a全局變量既可以是某對象函數創建,也可以是在本程序任何地方創建。 全局變量是可以被本程序所有對象或函數引用。 一個局部變量在被其它對象引用時,會是一個空值。 但全局變量卻不會出現這種情況。 \x0d\x0a \x0d\x0a全局變量全部存放在靜態存儲區,在程序開始執行時給全局變量分配存儲區,程序行完畢就釋放。 在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放;
C語言中局部變量存在棧里,全局變量存靜態存儲區。
局部變量在棧空間上分配,這個局部變量所在的函數被多次調用時,每次調用這個局部變量在棧上的位置都不一定相同。 局部變量也可以在堆上動態分配,但是記得使用完這個堆空間后要釋放之。
全局變量全部存放在靜態存儲區,在程序開始執行時給全局變量分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放;
擴展資料
C語言中局部變量和全局變量示例:
staticints1=0,s2=0,s3=0;//靜態變量放在靜態區
intg1=0,g2=0,g3=0;//全局變量放在靜態區
voidmain()
staticints4=0,s5=0,s6=0;
inta1=0,a2=0,a3=0;
charc1[]=aabb;//局部變量放在棧區
char*c2=aabb;//字符常量放在靜態區
char*m1=(char*)malloc(1);//堆區
char*m2=(char*)malloc(1);//堆區
char*m3=(char*)malloc(1);//堆區
printf(動態數據區\n);
printf(a1\na2\na3\n,&a1,&a2,&a3);
printf(c1\n,c1);
printf(m1\nm2\nm3\n,&m1,&m2,&m3);
printf(靜態數據區\n);
printf(s1\ns2\ns3\n,&s1,&s2,&s3);
printf(g1\ng2\ng3\n,&g1,&g2,&g3);
printf(s4\ns5\ns6\n,&s4,&s5,&s6);
printf(c2\n,c2);
問題1:堆Heap指的是用malloc和free,new和delete等函數動態創建的內存空間,由程序員自己維護和管理;棧Stack指的是函數1跳轉進入子函數2之前,為了保護函數1的現場(CPU寄存器狀態等信息,委的就是子函數2執行結束,還能夠返回到函數1)操作系統自動進行的壓棧和出棧操作;另外,我記得函數1進入子函數2之后,子函數2內部的臨時變量也是由操作系統在棧中分配的。 問題2:全局變量在編譯時就被編譯器固定在“數據段”了,占了數據段中的位置(存儲空間);靜態變量我沒有研究過,不敢輕言。
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.hudongshop.com/article/c9145369628cc328ec50.html,復制請保留版權鏈接!
chmod是Linux中的一個命令,用于更改文件的權限,它對于管理文件和目錄的訪問權限非常有用,本指南將帶您從初學者到高級用戶,全面了解chmod的用法,初學者指南格式chmod命令的格式為,chmod[選項][權限]文件或目錄選項常用的選項包括,c,在更改權限之前,檢查是否會發生更改,R,遞歸更改目錄及其子項的權限,v,顯示正...。
最新資訊 2024-09-29 05:05:47
準備好讓您的Flash項目脫穎而出了嗎,我們為您帶來了一個令人難以置信的資源寶庫,其中包含令人驚嘆的特效下載,將為您提供提升用戶體驗所需的一切,1.令人驚嘆的特效庫我們精心挑選了一系列免費和付費的特效,為您提供無窮無盡的可能性,從引人注目的動畫到逼真的粒子效果,您會找到適合任何項目的完美特效,免費特效下載FlashKitActionS...。
本站公告 2024-09-28 07:26:54
隨著企業不斷尋求優化運營、降低成本和提高效率的方法,云計算已成為當今數字時代的關鍵推動力,作為該領域的領導者,亞馬遜網絡服務,AWS,、微軟Azure和谷歌云平臺,GCP,提供了一系列全面的服務,滿足各種云計算需求,為了幫助個人和企業掌握這些領先的云平臺,W3Cschool推出了全面的在線課程,涵蓋AWS、Azure和GCP的核心概念...。
最新資訊 2024-09-28 07:13:31
在當今數字時代,擁有一個有效的網站對于任何企業或組織的成功至關重要,創建和維護一個成功網站是一項復雜且耗時的任務,這就是站長素材網的作用所在,我們提供全面的建設方案,讓您輕松打造一個出色的網站,如何選擇網站建設解決方案在選擇網站建設解決方案時,需要考慮以下幾個關鍵因素,目標受眾,您要吸引哪種類型的受眾,您的網站內容和設計應針對他們的需...。
互聯網資訊 2024-09-25 23:24:00
在當今數字時代,提供個性化網站體驗已成為贏得和留住客戶的關鍵因素,人工智能,AI,技術可賦能企業根據每個用戶的獨特偏好定制其網站體驗,從而顯著提升參與度和轉化率,個性化的優點個性化網站體驗提供了以下主要優點,提高參與度,個性化內容更能吸引用戶,使其在網站上停留更長時間并參與更多活動,提升轉化率,根據用戶偏好提供的相關產品和服務更有可能...。
本站公告 2024-09-16 01:25:38
算術運算符算術運算符用于執行數學運算,以下是最常見的算術運算符,運算符描述加法減法乘法除法求余數算術運算符的優先級如下,括號乘法和除法加法和減法邏輯運算符邏輯運算符用于比較值,以下是最常見的邏輯運算符,運算符描述邏輯與邏輯或邏輯非邏輯運算符的優先級如下,括號非與或比較運算符比較運算符用于比較兩個值,以下是最常見的比較運算符,80%10...。
最新資訊 2024-09-15 20:25:35
UEditor是一款強大且易用的富文本編輯器,深受開發人員和用戶歡迎,本指南將帶你踏上從UEditor新手到專家的旅程,分為五個階段,階段1,入門基礎在這個階段,你將學習UEditor的基本使用方法,包括,在你的項目中安裝和集成UEditor熟悉UEditor的界面和工具欄創建和編輯文本內容添加圖像、鏈接和表格階段2,發現高級功能掌握...。
最新資訊 2024-09-14 22:33:01
單選按鈕是一種用戶界面元素,允許用戶從一組選項中選擇一個,它們廣泛用于各種Web表單中,從簡單的注冊表單到復雜的調查問卷,網絡可訪問性單選按鈕對于網絡可訪問性至關重要,因為它們允許殘障人士使用鍵盤或輔助技術輕松地與Web表單進行交互,以下是單選按鈕如何有助于網絡可訪問性的一些具體示例,鍵盤導航,單選按鈕支持鍵盤導航,這使殘障人士可以使...。
互聯網資訊 2024-09-14 17:56:56
引言隨著Java在企業和個人開發中的廣泛應用,深入理解其核心概念和最佳實踐變得至關重要,本文旨在提供高級概念和最佳實踐的深入分析,giúpng??i??cnangcaok?n?ngJava和構建健壯、可維護的應用程序,并發和多線程并發與并行了解并發與并行的區別,并發允許多個任務同時執行,而并行執行多個任務在不同的CPU內核上同時執行,...。
本站公告 2024-09-12 16:59:23
Python中的sort,函數是一個強大的工具,它允許您按升序或降序對列表進行排序,默認情況下,sort,函數使用內建的順序規則對元素進行排序,但是,您還可以提供一個自定義的比較函數來指定自己的排序規則,語法sort,函數的語法如下,```list.sort,key=None,reverse=False,```list,待排序的...。
技術教程 2024-09-09 00:14:47
簡介控制臺應用程序是由命令行輸入和輸出驅動的程序,它們通常用于執行系統管理任務、腳本自動化或創建交互式工具,掌握控制臺應用程序開發可以為開發人員提供在各種平臺上構建強大和通用的應用程序的能力,控制臺應用程序的基礎創建控制臺應用程序C,使用VisualStudio或dotnetCLI創建一個新的控制臺項目,Python,創建包含以下代碼...。
技術教程 2024-09-07 06:24:30