1. 程式人生 > >程式的 記憶體佈局

程式的 記憶體佈局

.out檔案,可執行程式的佈局:
這裡寫圖片描述

檔案的佈局 和 程序的地址佈局 的比較:
這裡寫圖片描述

棧和堆要等到程式執行時,由系統來分配空間。

各個段的作用:

  • 堆疊段在程式執行後才正式存在,是程式執行的基礎,main函式也用到棧,因此堆疊要先建立。
  • .bss段存放的是未初始化的全域性變數和靜態變數。把未初始化的放在一起,清0比較方便。
  • .text段存放的是程式中的可執行程式碼。
  • .data段儲存的是那些已經初始化了的全域性變數和靜態變數,值要寫到記憶體裡。
  • .rodata段存放程式中的常量值,只讀資料段,如字串常量。因此指向字串常量的指標,不能通過該指標修改字串的內容。

靜態儲存區就是 .bss段 和 .data段


只讀區通常指程式中的.rodata段
區域性變數所佔空間為棧空間
動態記憶體空間為堆中的空間
程式可執行程式碼存放於.text段

函式的地址對應程式的程式碼段.text段。函式體的程式碼位於程式碼段,執行程式碼段的過程中,函式中的區域性變數在棧空間中,通過指標來讀出變數,供程式碼使用。

相關推薦

C++/C程式記憶體佈局及函式棧結構

一:系統的程式佈局圖: 二、詳解: 程式空間: 包括.txt程式碼段,.data資料段, .bss段,堆段,棧段。程式的地址從低往高。堆空間增長方向從低地址往高地址增長。 棧空間從高地址往低地址方向增長。從左往右方向為單位元組增長方向。

C++程式執行時記憶體佈局之----------區域性變數,全域性變數,靜態變數,函式程式碼,new出來的變數

宣告兩點: (1)開發測試環境為VS2010+WindowsXP32位; (2)記憶體佈局指的是虛擬記憶體地址,不是實體地址。   1.測試程式碼 #include <iostream> using namespace std; int g_int_a; i

後臺開發-核心技術與應用實踐筆記(linux程式記憶體空間佈局

linux下C程式的記憶體五區:程式碼段:存放程式執行程式碼的一塊區域。資料段:包括初始化資料段和未初始化資料段。初始化資料段用於存放已初始化的全域性變數和已初始化的靜態變數。未初始化資料段用於存放未初始化的全域性變數和未初始化的靜態變數。字串常量區:存放字串常量堆:存放程式

C程式(程序)的記憶體佈局

C程式(程序)的記憶體佈局 #include <stdio.h> const int a = 10; //全域性常量a int main(void) {   const int b = 20; //區域性常量b   int* pa =

程式記憶體佈局

.out檔案,可執行程式的佈局: 檔案的佈局 和 程序的地址佈局 的比較: 棧和堆要等到程式執行時,由系統來分配空間。 各個段的作用: 堆疊段在程式執行後才正式存在,是程式執行的基礎,main函式也用到棧,因此堆疊要先建立。 .bss

C++程式記憶體佈局

    對任何一個普通C++程式來講,它都會涉及到5種不同的資料段。常用的幾個資料段種包含有“程式程式碼段”、“程式資料段”、“程式堆疊段”等。不錯,這幾種資料段都在其中,但除了以上幾種資料段之外,程序還另外包含兩種資料段。下面我們來簡單歸納一下程序對應的記憶體空間中所包

7.6. 一個C程式記憶體佈局(memory layout)

7.6.一個C程式的記憶體佈局(memory layout)一個C程式一直以來都是由以下5個段(pieces)組成: 程式碼段(text segment):存放CPU執行的機器指令(machine instructions)。通常情況下,程式碼段是可共享的,使其可共享的目的是

程式記憶體佈局——函式呼叫棧的那點事

[注]此文是《程式設計師的自我修養》的讀書總結,其中摻雜著一些個人的理解,若有不對,歡迎拍磚。 程式的記憶體佈局 現代的應用程式都執行在一個虛擬記憶體空間裡,在32位的系統裡,這個記憶體空間擁有4GB的定址能力。現代的應用程式可以直接使用32位的地址進行定址,整個記憶

40、程式中的記憶體佈局

先看一張示意圖:不同程式碼在可執行程式中的對應關係    程式和程序的不同:    程式是 靜態的 概念,表現形式為一個可執行檔案程序是 動態的 概念,程式由作業系統載入執行後得到程序每個程式可以對應多個程序每個程序只能對應一個程式問題:包含指令碼程式碼的文字檔案是一種型別的

C++程式中的記憶體佈局

記憶體分配: 1、棧區(stack)— 由編譯器自動分配釋放 ,存放區域性變數、臨時變數、引數值。其操作方式類似於資料結構中的棧。 2、堆區(heap) — 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收 。 3、全域性區(靜態區)(stat

記憶體管理+記憶體佈局

記憶體管理 8.1 作用域 C語言變數的作用域分為: l  程式碼塊作用域(程式碼塊是{}之間的一段程式碼) l  函式作用域 l  檔案作用域 8.1.1 區域性變數 區域性變數也叫auto自動變數(auto可寫可不寫),一般情況下程式碼塊{}內部定義的變數都是自

關於Class物件、類載入機制、虛擬機器執行時記憶體佈局的全面解析和推測

簡介: 本文是對Java的類載入機制,Class物件,反射原理等相關概念的理解、驗證和Java虛擬機器中記憶體佈局的一些推測。本文重點講述瞭如何理解Class物件以及Class物件的作用。 歡迎探討,如有錯誤敬請指正 如需轉載,請註明出處 http://www.cnblogs.com/nul

程式頁面佈局和絕對定位和button分享問題

<view class="dibu"> <input value='{{inputVal}}' bindinput='inputTyping' class="wz" bindinput='inputTyping' placeholder="請輸入私信內容" placeho

程式WXSS佈局

1. 儘量採用flex 佈局,指定flex-direction是row( 從左到右)還是column (從上到下) 特別要記得寫 flex-wrap: wrap; 不然超出螢幕部分不會換行 display: flex; flex-direction: row; flex-w

程式FLEX佈局

flex佈局要求有父元素,子元素,並通過在父元素上設定彈性佈局讓子元素位置發生變化 主軸與交叉軸由flex-direction屬性來確定,該屬性的值決定了主軸是哪個方向 flex-direction 設定子元素的排序方式 row: 行排列 column: 列排列

Java 物件的記憶體佈局

一個Java 物件在在記憶體中的儲存佈局分為3 塊區域(HostSpot VM): 物件頭(Header) 例項資料(Instance Data) 對齊填充 1. 物件頭 物件頭的資訊主要包括兩個部分: Mark Word 型別指標

Linux程序地址空間 程序記憶體佈局

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

DirectX11--HLSL中矩陣的記憶體佈局和mul函式探討

前言 說實話,我感覺這是一個大坑,不知道為什麼要設計成這樣混亂的形式。 在我用的時候,以row_major矩陣,並且mul函式以向量左乘矩陣的形式來繪製時的確能夠正常顯示,並不會有什麼感覺。但是也有人會遇到明明傳的矩陣沒有問題,卻怎麼樣都繪製不出的情況;或者使用列矩陣,在mul函式用向量左乘的形式卻又可以

Delphi清理釋放本程式記憶體的程式碼

zt    http://www.abcxd.com/delphi/abcxddelphi/delphiZY/SetProcessWorkingSetSize.html 明生注:請注意中間那段揭密文章,來按照自己的個人意願來執行。不要貪一時的快感而影響穩定性

使用Valgrind找出Android中Native程式記憶體洩露問題

轉自 https://blog.csdn.net/roland_sun/article/details/46049485   Android程式通常使用Java程式編寫,由於Dalvik虛擬機器集成了垃圾回收機制,所以記憶體使用比較不容易出錯,通常就是一個本該被釋放的物件