不知道你有沒有想過什麼是程式?程式 = 資料結構 + 演算法
再往內部粗略的理解,計算機硬體只能識別0和1這兩種數字量,非0即1,非黑即白
當然今天不**這些,主要聊一聊程式中的資料在記憶體中存放的位置及形式,相信這會對進一步理解程式有一定的幫助!
參考文章:
1. 主要分割槽
主要分為四個區域:堆、棧、全域性資料區以及**區【堆疊代全】
①堆(heap):由程式設計師自行負責申請和釋放,如果申請空間但是沒有釋放,程式結束時由作業系統進行**。
②棧(stack):由系統自動分配釋放,存放區域性變數、函式引數等。
③全域性資料區:全域性變數、靜態變數、一般常量、字串常量
全域性資料:全域性變數、靜態變數放在一塊,區分初始化與未初始化【可讀可寫】
未初始化:bss段
已初始化:data段
常量資料:一般常量、字串常量【唯讀】
靜態區域性變數只能被乙個函式訪問,而全域性則可以被所有函式訪問
2>靜態資料成員的初始化
靜態數成員只能在類外進行初始化,並且不能用引數初始化表初始化。即類內宣告類外初始化。
④程式**區:存放函式的二進位制**【唯讀】
2. 一些特點
3. 實際例子
int a = 0; //a在全域性已初始化資料區 char *p1; //p1在bss區(未初始化全域性變數) main()
4. 一點思考
資料作為程式中至關重要的一部分,對資料操作如何影響程式的執行效率呢?
初始化c++物件應該在堆上初始化還是應該在棧上初始化呢?有什麼區別麼?
如何看待 頻繁的new/delete勢必會造成記憶體空間的不連續,從而造成大量的碎片,使程式效率降低。
linux 32位環境使用者空間分配情況
記憶體初始化
電容的分類 dram 基本原件是電容,需要定時重新整理,儲存速度較慢 dram又分為 sram 同步動態隨機儲存器 synchronous dynamic random access memory ddr 雙倍速率同步動態隨機儲存器 double data rate sdram ddr2 在 ddr...
記憶體初始化過程
1,物理記憶體資訊的獲取 0x15中斷,功能號 e820h,e801h,e88h 見檔案 linux arch i386 boot setup.s 執行完上面的 後,記憶體資訊被分為多條資訊放在e820map位置處,每個資訊條目長20位元組,包含乙個記憶體區間的資訊,條目數放在e820nr處。即實際...
記憶體初始化檔案 ISE Quartus
1.quartus mif file demo multiple line comment multiple line comment single line comment depth 32 the size of data in bits width 8 the size of memory i...