1. 程式人生 > >c/c++常變數存放。棧區,堆區,靜態區

c/c++常變數存放。棧區,堆區,靜態區

學習語言,首先等知曉所敲下的程式碼做了什麼,而程式碼中最重要的就是變數與常量,這些構成函式,產生功效。

首先得清楚以下幾個知識點(或者說專有名詞)

1.生命週期:變數的作用範圍,類似生物的存活週期,對變數的使用得在其生命週期內。很好理解。

2. 記憶體:記憶體儲器的儲存量,理所當然,一個數據得佔用一塊物理空間,邏輯的東西得有物理的東西來支援。而儲存器在一般電腦上是:暫存器-> 快取->記憶體->硬碟。

棧區(stack):空間小,系統自動建立銷燬。生長方向是由高地址向低地址生長。

堆區(heap):這個很關鍵,也是c/c++較很多語言靈活的地方,程式設計師手動開闢,手動釋放,程式結束時可能由 OS 回收。使用關鍵字malloc/new,free/delete對其開闢釋放空間,每個人電腦的空間都是有限的。生長方向與棧區相反。

靜態區( static):內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。儲存。

文字可能冗雜,結合我繪製的圖片方便理解記憶。

多對理工科的東西進行彙總,形成知識網路,更好地去理解,最好繪製成思維導圖,形成邏輯思維。

清楚區域性變數,全域性變數,動態記憶體開闢釋放,就是學習c/cpp的一個基礎。

絕大多數是在棧上完成,系統自動開闢釋放,比如函式內部定義一個變數a=1,我們不需要對其理睬,在其生命週期完結(函式停止時)自動釋放空間。

但是我們建立一個連結串列,雜湊之類的資料結構,就要自己動態開闢空間,也要自己釋放空間,不然記憶體持續佔用不釋放就會宕機。這個就類似c++中的解構函式。

相關推薦

c/c++變數存放靜態

學習語言,首先等知曉所敲下的程式碼做了什麼,而程式碼中最重要的就是變數與常量,這些構成函式,產生功效。 首先得清楚以下幾個知識點(或者說專有名詞) 1.生命週期:變數的作用範圍,類似生物的存活週期,對變數的使用得在其生命週期內。很好理解。 2. 記憶體:記憶體儲器的儲存

解釋內存中的(stack)、(heap)和靜態(static area)的用法

ner 創建 static padding IT body 新版 變量 類型 通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用內存中的棧空間;而通過new關鍵字和構造器創建的對象放在堆空間;程序中的字面量(literal)如直接書寫的10

解釋記憶體中的(stack)、(heap)和靜態(static area)的用法

通常我們定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的 現場儲存 都使用記憶體中的棧空間;而通過new關鍵字和構造器建立的物件放在堆空間;程式中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態區中。棧空間操作起來最快但是棧很小,通

解釋記憶體中的(stack)、(heap)和靜態(static area)的用法

堆區:專門用來儲存物件的例項(new 建立的物件和陣列),實際上也只是儲存物件例項的屬性值,屬性的型別和物件本身的型別標記等,並不儲存物件的方法(方法是指令,儲存在Stack中)1.儲存的全部是物件,每個物件都包含一個與之對應的class的資訊。(class的目的是得到操作指

JVM、(stack)、(heap)和靜態(static area)以及記憶體溢位的認識

一、認識JVM 1. 什麼是JVM? JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。Java虛擬機器包括一套位元組碼指令集、一組暫

C變數 const的應用

const int a=3       表示a被定義為一個整型變數,指定其值為3,而且在變數存在期間其值不能改變。      常變數與常量的異同是:常變數具有變數的基本屬性:有型別,站儲存單元,只是不允許改變其值。可以說,常變數是有

C語言區域性變數在記憶體中的順序

首先總結規則,詳細分析見下面: 規則1:記憶體由低到高優先分配給佔位8位元組、4位元組、2位元組、1位元組的資料型別 資料型別佔位說明: 8位元組:double、longlong int 4

給出一百分制成績要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’ 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E 將下面的程式填寫完整

題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A, 80-89分為B, 70-79分為C, 60-69分為D, 60分以下為E 。 將下面的程式填寫完整。 #include <stdio.h> int main() {

什麼變數存放

內容會持續更新,有錯誤的地方歡迎指正,謝謝! 什麼是棧區,什麼是堆區 棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值、區域性變數的值等,記憶體的分配是連續的,類似於陣列,當我們宣告變數時,編譯器會自動接著當前棧區的結尾來分配記憶體。 堆區

解釋記憶體中的(stack)、(heap)和靜態儲存區的用法

String str = new String(“hello”); 答:通常我們定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的現場儲存都使用記憶體中的棧空間;而通過new關鍵字和構造器建立的物件放在堆空間;程式中的字面量(literal)如直接書寫的100、“hello”和常

細說JVM系列:成員變數分配在中還是中?

○ 種一棵樹最好的時間是十年前,其次是現在 ○ 堅持輸出,堅持書寫,才可以持續成長 ○ 所有美好事物的成長都是緩慢的 ○ 既往不戀,未來不迎,當下不雜 ○ 業精於勤,荒於嬉,行成於思,毀於隨 ○將軍趕路 不追小兔 ○不要拘泥於語言,同樣也不要拘泥於行業,眼光放遠一點

Java中記憶體、記憶體、方法——淺析

  java中記憶體分配策略及堆和棧的比較  1 記憶體分配策略   按照編譯原理的觀點,程式執行時的記憶體分配有三種策略,分別是靜態的,棧式的,和堆式的. 靜態儲存分配是指在編譯時就能確定每個資料目標在執行時刻的儲存空間需求,因而在編譯時就可以給他們分配固定的記憶體空間.這種分配策略要求程式程式碼中不允許有

C++DLL匯出類(快排插入排序選擇排序氣泡排序)

sort.h #ifndef SORT_H #define SORT_H #ifdef DLL_FILE class __declspec(dllexport) sort #else class __declspec(dllimport) so

解釋記憶體中的(stack)、(heap)和方法(method area)的用法

        通常我們定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的現場儲存都使用JVM中的棧空間;而通過new關鍵字和構造器建立的物件則放在堆空間,堆是垃圾收集器管理的主要區域,由於現在的垃圾收集器都採用分代收集演算法,所以堆空間還可以細分為新生代和老生代

歸併排序快速排序排序氣泡排序 c語言原始碼

1.歸併排序#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 50000 void merge(int [],int,int,int);//歸併排序數組

記憶體中的(stack)、(heap)和方法(method area)的用法

(1)定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的現場儲存都使用JVM中的棧空間; (2)通過new關鍵字和構造器建立的物件則放在堆空間,堆是垃圾收集器管理的主要區域,由於現在的垃圾收集器都採用分代收集演算法,所以堆空間還可以細分為新生代和老生代,再具

JVM記憶體溢位詳解(溢位溢位持久代溢位以及無法建立本地執行緒)

寫在前面 記憶體溢位和記憶體洩漏的區別: 記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是記

Java JVM:記憶體溢位(溢位溢位持久代溢位以及 nable to create native thread)

轉載自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括: 1. 棧溢位(StackOverflowError) 2. 堆溢位(OutOfMemoryError:java heap space) 3. 永久代

Java JVM:記憶體溢位(溢位溢位持久代溢位以及 nable to create native thread),

Hotspot jvm的實現中,將堆記憶體分為了兩部:新生代,老年代。在堆記憶體之外,還有永久代, 其中永久代實現了規範中規定的方法區。 棧溢位:出現此種情況是因為方法執行的時候,棧的深度超過了虛擬機器容許的最大深度所致。 死遞迴: import java.util.*;

c語言—全局文字常量程序代碼 詳解

註意 進制 但是 ack int 運行時 內存區域 否則 數組 轉:http://www.cnblogs.com/xiaowenhui/p/4669684.html 一、預備知識—程序的內存分配 一個由C/C++編譯的程序占用的內存分為以下幾個部分1、棧區(stack)—