1. 程式人生 > >作用域生存週期理解筆記

作用域生存週期理解筆記

作用域 生存週期 儲存位置

作用域是一個變數所作用的位置
生存週期是一個變數存在的時間
儲存位置是一個變數儲存的位置

程式碼區:存放CPU執行的機器指令,程式碼區是可共享,並且是隻讀的。
資料區:存放已初始化的全域性變數、靜態變數(全域性和區域性)、常量資料。
BBS區:存放的是未初始化的全域性變數和靜態變數。
棧區:由編譯器自動分配釋放,存放函式的引數值、返回值和區域性變數,在程式執行過程中實時分配和釋放,棧區由作業系統自動管理,無須程式設計師手動管理。
堆區:堆是由malloc(),new函式分配的記憶體塊,使用free(),delete函式來釋放記憶體,堆的申請釋放工作由程式設計師控制,容易產生記憶體洩漏。

static儲存型別
被宣告為靜態型別的變數,無論是全域性的還是區域性的,都儲存在資料區中,其生命週期為整個程式
如果是靜態區域性變數,其作用域為一對{}內,如果是靜態全域性變數,其作用域為當前檔案。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。
字串常量
字串常量儲存在資料區中,其生存期為整個程式執行時間,但作用域為當前檔案

C++編譯器將計算機記憶體分為 程式碼區 和 資料區。
程式碼區 就是存放程式程式碼
資料區 則是存放程式編譯和執行過程出現的變數和常量。
資料區 又分為靜態資料區、動態資料區以及常量區。
動態資料區 包括堆區和棧區。

程式碼區:
存放程式程式碼;
資料區
a.靜態資料區:
在編譯器進行編譯的時候就為該變數分配的記憶體,即全域性變數和靜態變數用static宣告的變數,
存放在這個區的資料程式全部執行結束後 系統自動釋放,生存週期 貫穿於整個程式執行過程。
全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域(.data),
未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域(.bss)。

b.堆區:
這部分儲存空間完全由程式設計師自己負責管理,它的分配和釋放都由程式設計師自己負責。這個區是唯一一個可以由程式設計師自己決定變數生存 期的區間。可以用malloc,new申請對記憶體,並通過free和delete釋放空間。如果程式設計師自己在堆區申請了空間,又忘記將這片記憶體釋放掉,就 會造成記憶體洩露的問題,導致後面一直無法訪問這片儲存區域。但程式退出後,系統自動回收資源。分配方式倒是類似於連結串列。
堆heap的容量較大

c.棧區:
存放函式的形式引數和區域性變數,由編譯器分配和自動釋放,函式執行完後,區域性變數和形參佔用的空間會自動被釋放。效率比較高,但是分配的 容量很有限。
棧一般容量較小

d.常量區:
存放常量的區間,如字串常量等,注意在常量區存放的資料一旦經初始化後就不能被修改。 程式結束後由系統釋放。

相關推薦

作用生存週期理解筆記

作用域 生存週期 儲存位置 作用域是一個變數所作用的位置 生存週期是一個變數存在的時間 儲存位置是一個變數儲存的位置 程式碼區:存放CPU執行的機器指令,程式碼區是可共享,並且是隻讀的。 資料區:存放已初始化的全域性變數、靜態變數(全域性和區域性)、

愛創課堂每日一題第八天說說你對作用鏈的理解

前端 前端學習 前端入門作用域鏈的作用是保證執行環境裏有權訪問的變量和函數是有序的,作用域鏈的變量只能向上訪問,變量訪問到window對象即被終止,作用域鏈向下訪問變量是不被允許的。愛創課堂每日一題第八天說說你對作用域鏈的理解?

jsp九個內置對象和四個作用的個人理解

服務 應對 有效 bsp 一個用戶 返回 out ica page jsp中九大內置對象和四個作用域:(application,應用程序對象session,會話對象request,請求對象response,響應對象page,當前頁面對象pageContext,頁面上下文對象

js作用以及作用鏈的理解

以前一直以為自己對作用域和作用域鏈瞭解的比較清晰,直到最近碰到一個問題的時候,才發現自己是真的傻逼了,具體問題的應用場景就不在這裡說了,下面我將簡單舉例說明下; 示例1: var a=20; function b1(){ console.log(a); };

js作用鏈的理解

(18.12.26) js作用域鏈的理解 一,執行環境 執行環境定義了變數和函式有權訪問的其他資料。每個執行環境都有與之對應的變數物件(variable object),儲存著該環境中定義的所有變數和函式。 1.1全域性環境 全域性執行環境是最外圍的一個執行環境,在web

說說你對作用鏈的理解

什麼是作用域鏈: 當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈(scope chain,不簡稱sc)來保證對執行環境有權訪問的變數和函式的有序訪問。 作用: 保證執行環境裡有權訪問的變數和

JavaScript的作用、塊級作用(私有作用)概念理解

任何一對花括號中的語句集都屬於一個塊,在這之中定義的所有變數在程式碼塊外都是不可見的,我們稱之為塊級作用域 作用域永遠都是任何一門程式語言中的重中之重,因為它控制著變數與引數的可見性與生命週期。講到這裡,首先理解兩個概念:塊級作用域與函式作用域。 什

Javascript的作用作用鏈的理解

1.要理解作用域就得理解JS引擎解析機制 如何解析一段可執行程式碼? 分了兩個階段:解析程式碼和執行程式碼。其中解析程式碼可以理解為記名字,就是先把關鍵字var和function定義的變數名登記了下來,這也就有了變數提升這一說。在執行程式碼階段才是真正的執行賦值,運算等操

[Spring]例項化bean的方法/bean的作用/生命週期

例項化方法類構造器例項化package com.yiki.bean.imp; import com.yiki.service.Service; /*業務bean*/ public class Ser

JavaScript作用鏈的理解

局部變量 全局變量 作用域鏈 num 我們 log 全局對象 spa 變量作用域 前言 作用域是JavaScript一個很重要的概念,想要學好JavaScript就需要理解javascript作用域和作用域鏈的工作原理。這篇文章對JavaScript作用域鏈和作用域鏈做一個

【學習筆記】深入理解js原型和閉包(12)——簡介【作用

提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫程式碼的時候,不要在“塊”裡面宣告變數,要在程式碼的一開始就宣告好了。以避免發生歧義。如: &nbs

【學習筆記】深入理解js原型和閉包(18)——補充:上下文環境和作用的關係

本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。   再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。 00 上下文環境: 可以理解為一個看不見摸不著的物件(有若干個屬性),雖然看不見

JavaScript理解筆記—變數提升 全域性作用 名字空間

JavaScript會掃描整個函式體,把所有申明的變數提升到函式頂部。 注:var x=‘Tom’ 只提升宣告,不提升賦值。 例如:console.log(x);var x=‘Tom’; 執行不會報錯,輸出為:undefined 上述語句等效為:var x;c

static變數的作用生存週期,static關鍵字

靜態區域性變數、靜態全域性變數 生存週期: 變數從定義到銷燬的時間範圍,也就是可以訪問的時間段。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷燬,除了靜態變數之外的區域性變數都存放於棧中。 作

關於C語言變數生存週期作用、記憶體分佈、預設值的基本總結

在C語言中,參與計算的資料都是通過不同型別的常量或者變數來表示的,而使用變數時不得不注意變數的生存週期、作用域,記憶體區域和預設值。在這裡簡單介紹一下記憶體區域: 程式碼段(code segment)

javascript作用理解

sco 執行上下文 變量提升 返回 結構圖 活動 ren 產生 內部 執行上下文(Execution context,簡稱EC) 概念 每當控制器到達ECMAScript可執行代碼的時候,就進入了一個執行上下文。 javascript中,EC分為三種: 全局

Jmeter學習筆記2-原件作用與執行順序

校驗 height sse proc tro 有效 收集 技術分享 控制 1.元件的作用域 (1)配置元件(config elements):會影響其作用範圍內的所有元件。 (2)前置處理程序(per-processors):在其作用範圍內的每一個sampler元件之

Head First Servlets and JSP】筆記9:屬性的作用、線程安全

string details attr target 部分 ring 瀏覽器 什麽是 作用 什麽是屬性? 屬性和參數 屬性的3個作用域 屬性API 屬性不好的一面 1、到底什麽是屬性(Attribute)? 屬性就是一個對象,可以被設置(bound,也可以

8——對象的作用生存期,……

撤銷 成員 delete free 如果 動態內存 可見 生存 部分 對象的作用域、可見域和生存期與普通變量,如int型變量的作用域、可見域和生存期並無不同。 對象同樣有局部、全局和類內(稍後就將對對象成員進行介紹)之分,對於在代碼塊中聲明的局部對象,在代碼塊執行結束退

深入理解JavaScript變量作用

結果 局部變量 全局對象 優先 man ++ for tro pan   JS變量作用域特點:   a、JS變量作用域是基於其特有的作用域鏈的。   b、JavaScript沒有塊級作用域。   c、函數中聲明的變量在整個函數中都有定義。 1、作用域鏈 var rain