C 程式是由一下幾部分組成

2021-08-01 05:06:30 字數 1686 閱讀 4008

c++程式是由一下幾部分組成:

(1) 正文段 (.text)

程式**就儲存在text 段,這是由c p u執行的機器指令部分。通常,正文段是可共享的,所以即使是經常執行的程式(如文字編輯程式、c編譯程式、s h e l l等)在儲存器中也只需有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改其自身的指令。

當你在鏈結定位檔案中將該符號放置在**段 後,那麼該符號表示的值就是**段大小,編譯連線時,該符號所代表的值會自動代入到源程式中。

(2) 唯讀資料段 .rdata 

唯讀資料是在程式執行期間不能被修改的,程式 只能讀取這些資料,因此編譯器把他們組織在一起儲存在唯讀資料段。

(3) 初始化資料段data 

data端用於儲存經過初始化的資料,包括帶 初值的全域性變數和static變數,都儲存在data區。data段的起始位置也是由連線定位檔案所確定,大小在編譯連線時自動分配,和程式大小沒有關 系,但和程式使用到的全域性變數,常量數量相關。

(4) 未初始化資料段bss 

bss這一名稱**於早期匯程式設計序的乙個操作 符意思是block started by symbol(由符號開始的塊),通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,在程式載入時由核心清0。 bss段屬於靜態記憶體分配。 它的初始值也是由使用者自己定義的連線定位檔案所確定,使用者應該將它定義在可讀寫的ram區內,源程式中使用malloc分配的記憶體並不是這一塊,它不是根據data大小確定,主要由程式中同時分配記憶體最大值所確定,不過如果超出了範圍,也就是分配失敗,可以等空間釋放之後再分配。

(5) 棧stack 

stack是用來儲存區域性變數以及每次函式調 用時所需儲存的資訊。每次函式呼叫時,其返回位址、以及呼叫者的環境資訊(例如某些機器暫存器)都存放在棧中。然後,新被呼叫的函式在棧上為其自動和臨時 變數分配儲存空間。通過以這種方式使用棧, c函式可以遞迴呼叫。stack是一種「後進先出」(last in first out,lifo)的資料結構,這意味著最後放到棧上的資料,將會是第乙個從棧上移走的資料。對於哪些暫時存貯的資訊,和不需要長時間儲存的資訊來 說,lifo這種資料結構非常理想。在呼叫函式或過程後,系統通常會清除棧上儲存的區域性變數、函式呼叫資訊及其它的資訊。棧另外乙個重要的特徵是,它的地 址空間「向下減少」,即當棧上儲存的資料越多,棧的位址就越低。棧(stack)的頂部在可讀寫的ram區的最後。

(6) 堆heap 

編譯器通常在堆中進行動態記憶體分配。

由於歷史上形成的慣例,堆位於非初始化資料段 頂和棧底之間。堆是「先進先出」(first in first out,fifo)資料結構。它只允許在堆的一端插入資料,在另一端移走資料。堆的位址空間「向上增加」,即當堆上儲存的資料越多,堆的位址就越高。

資料儲存

(1) 常量

對於整型常量和字元型常量,由於不需要寫操 作,編譯器會將其直接編譯在**之中,因此不需要儲存。

對於字串常量,編譯器將其放入唯讀資料 端.rdata,同事對於相同的字串常量,編譯器會優化並只儲存一次。

(2) 變數

- 全域性變數

未初始化的,儲存於.bss ; 初始化的,儲存於.data 

- 靜態變數

和全域性變數相同

-自動變數

區域性變數儲存於stack ; 動態分配的記憶體,儲存於heap。

- 暫存器變數

儲存位置在cpu暫存器內。

結構體的儲存布局:

見教材p95頁----p96頁

php程式由幾部分組成

php程式由5個部分組成,分別為 1 起始標籤 2 php語句的分隔符 3 注釋,有單行注釋 多行注釋 4 換行符,可加強 的可讀性 5 段 如函式等 本教程操作環境 windows7系統 php7.1版,dell g3電腦 php 程式的組成部分 1.起始和結束標籤,所有 php 都必須寫在這對標...

Linux由幾部分組成 Linux系統結構介紹

隨著不斷發生以及進步,linux系統的使用者不斷飆公升,越來越多的企業都開始使用linux系統。不過有些人對於linux不是很了解,可能都疑惑linux體系結構是怎麼樣的?linux系統結構主要分為三個主要部分,接下來我們來看看吧。1 linux核心 核心是系統的核心,是執行程式和管理磁碟 印表機等...

人工神經網路主要哪幾部分組成,具體的定義是什麼?

人工神經網路主要架構是由神經元 層和網路三個部分組成。整個人工神經網路包含一系列基本的神經元 通過權重相互連線。神經元是人工神經網路最基本的單元。單元以層的方式組,每一層的每個神經元和前一層 後一層的神經元連線,共分為輸入層 輸出層和隱藏層,三層連線形成乙個神經網路。輸入層只從外部環境接收資訊,是由...