亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

通過一個小例子來簡單理解C語言中的內存空間管理

2020-05-23 14:13:34
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了通過一個小例子來簡單理解C語言中的內存空間管理,涉及到堆和棧等數據結構的基本知識,需要的朋友可以參考下

對于一個C語言程序而言,內存空間主要由五個部分組成代碼段(.text)、數據段(.data)、BSS段(.bss),堆和棧組成,其中代碼段,數據段和BSS段是編譯的時候由編譯器分配的,而堆和 棧是程序運行的時候由系統分配的。布局如下

通過一個小例子來簡單理解C語言中的內存空間管理

在上圖中,由編譯器分配的地址空間都是在連接的時候分配的,而運行時分配的空間是在程序運行時由系統分配的

BSS段:BSS段(bss segment)通常是指用來存放程序中未初始化的全局變量和靜態變量 (這里注意一個問題:一般的書上都會說全局變量和靜態變量是會自動初始化的,那么哪來的未初始化的變量呢?變量的初始化可以分為顯示初始化和隱式初始化,全局變量和靜態變量如果程序員自己不初始化的話的確也會被初始化,那就是不管什么類型都初始化為0,這種沒有顯示初始化的就是我們這里所說的未初始化。既然都是0那么就沒必要把每個0都存儲起來,從而節省磁盤空間,這是BSS的主要作用)的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬于靜態內存分配。 BSS節不包含任何數據,只是簡單的維護開始和結束的地址,即總大小,以便內存區能在運行時分配并被有效地清零。BSS節在應用程序的二進制映象文件中并不存在,即不占用磁盤空間 而只在運行的時候占用內存空間 ,所以如果全局變量和靜態變量未初始化那么其可執行文件要小很多。

數據段:數據段(data segment)通常是指用來存放程序中已初始化的全局變量和靜態變量的一塊內存區域。數據段屬于靜態內存分配,可以分為只讀數據段和讀寫數據段。 字符串常量等,但一般都是放在只讀數據段中 。

代碼段:代碼段(code segment/text segment)通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,并且內存區域通常屬于只讀, 某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等,但一般都是放在只讀數據段中 。

堆(heap):堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

棧 (stack):棧又稱堆棧, 是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味著在數據段中存放變 量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,并且待到調用結束后,函數的返回值也會被存放回棧中。由于棧的先進先出特點,所以 棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆??闯梢粋€寄存、交換臨時數據的內存區。注意:??臻g是向下增長的,每個線程有一個自己的棧,在linux上默認的大小是8M,可以用ulimit查看和修改。

棧系統提供的功能,特點是快速高效,缺點是有限制,數據不靈活;而堆是函數庫提供的功能,特點是靈活方便,數據適應面廣泛,但是效率有一定降低。

以下是一個簡單的c文件,環境是OS--Linux,ARCH--PPC

 

 
  1. ##sta.c### 
  2. #include <stdio.h> 
  3.  
  4. int kk[100] = {1,2,3,4,5}; 
  5. int tt[100]; 
  6. int ii; 
  7.  
  8. int main() 
  9. int i; 
  10. static int si; 
  11. char a[10]= "abcd"
  12. printf("i is %d/n"); 
  13. return 0; 
  14.  
  15.  
  16.  
  17. 經過gcc -S sta.c之后,生成的匯編代碼如下 
  18.  
  19. ##sta.s### 
  20.  
  21.  
  22.  
  23. .file "sta.c" 
  24. .gnu_attribute 4, 2 
  25. .gnu_attribute 8, 3 
  26. .globl kk 
  27. .section ".data" 
  28. .align 2 
  29. .type kk, @object 
  30. .size kk, 400 
  31. kk: 
  32. .long 1 
  33. .long 2 
  34. .long 3 
  35. .long 4 
  36. .long 5 
  37. .zero 380 
  38. .lcomm si.2254,4,4 
  39. .type si.2254, @object 
  40. .section .rodata 
  41. .align 2 
  42. .LC1: 
  43. .string "i is %d/n" 
  44. .align 2 
  45. .LC0: 
  46. .string "abcd" 
  47. .zero 5 
  48. .section ".text" 
  49. .align 2 
  50. .globl main 
  51. .type main, @function 
  52.  
  53. main: 
  54. stwu 1,-32(1) 
  55. mflr 0 
  56. stw 0,36(1) 
  57. stw 31,28(1) 
  58. mr 31,1 
  59. lis 9,.LC0@ha 
  60. la 9,.LC0@l(9) 
  61. lwz 0,0(9) 
  62. lbz 9,4(9) 
  63. stw 0,12(31) 
  64. stb 9,16(31) 
  65. li 0,0 
  66. stb 0,17(31) 
  67. li 0,0 
  68. stb 0,18(31) 
  69. li 0,0 
  70. stb 0,19(31) 
  71. li 0,0 
  72. stb 0,20(31) 
  73. li 0,0 
  74. stb 0,21(31) 
  75. lis 9,.LC1@ha 
  76. la 3,.LC1@l(9) 
  77. crxor 6,6,6 
  78. bl printf 
  79. li 0,0 
  80. mr 3,0 
  81. lwz 11,0(1) 
  82. lwz 0,4(11) 
  83. mtlr 0 
  84. lwz 31,-4(11) 
  85. mr 1,11 
  86. blr 
  87. .size main, .-main 
  88. .comm tt,400,4 
  89. .comm ii,4,4 
  90. .ident "GCC: (GNU) 4.2.3" 
  91. .section .note.GNU-stack,"",@progbits 

Note: 一般編譯器和操作系統實現來說,對于虛擬地址空間的最低(從0開始的幾K)的一段空間是未被映射的,也就是說它在進程空間中,但沒有賦予物理地址,不能被訪問。這也就是對空指針的訪問會導致crash的原因 ,因為空指針的地址是0。至于為什么預留的不是一個字節而是幾K,是因為內存是分頁的,至少要一頁;另外幾k的空間還可以用來捕捉使用空指針的情況。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美乱大交xxxxx另类电影| 亚洲人成欧美中文字幕| 欧美日韩亚洲一区二区三区| 成人网页在线免费观看| 中文字幕av一区二区三区谷原希美| 91av福利视频| 国产日韩在线亚洲字幕中文| 2020欧美日韩在线视频| 欧美日韩国产成人在线观看| 精品性高朝久久久久久久| 欧美成人在线网站| 亚洲乱码一区av黑人高潮| 亚洲精品国产精品乱码不99按摩| 国产精品三级久久久久久电影| 国产精品视频一| 日本国产一区二区三区| 国产美女久久久| 欧美另类69精品久久久久9999| 国产日韩欧美夫妻视频在线观看| 欧美孕妇孕交黑巨大网站| 日日狠狠久久偷偷四色综合免费| 亚洲精品美女在线观看播放| 欧美成人免费网| 清纯唯美亚洲综合| www.国产精品一二区| 欧美另类极品videosbestfree| 久久久女女女女999久久| 欧美成在线视频| 日韩中文字幕免费| 国产男女猛烈无遮挡91| 国产欧美日韩精品在线观看| 欧美—级a级欧美特级ar全黄| 欧美性生交xxxxxdddd| 91亚洲精品视频| 欧美一级淫片videoshd| 亚洲japanese制服美女| 国产精品一区二区三区毛片淫片| 久久全国免费视频| 精品久久久久久国产| 黄色精品一区二区| 91久久久久久久一区二区| 欧美极品在线播放| 日本精品久久久| 亚洲va男人天堂| 亚洲字幕一区二区| 久久躁狠狠躁夜夜爽| 久久99视频免费| 中文字幕亚洲欧美| 国产午夜精品视频| 91免费人成网站在线观看18| 国产精品视频一| 国产精品夜间视频香蕉| 欧美日韩免费看| 久久久伊人欧美| 国产精品久久久久久久app| 精品在线观看国产| 亚洲精品suv精品一区二区| 国产精品mp4| 国产日韩精品在线播放| 操人视频在线观看欧美| 亚洲最新中文字幕| 国产精品一区二区女厕厕| 色偷偷88888欧美精品久久久| 亚洲成色777777在线观看影院| 国模视频一区二区三区| 国产一区二区三区网站| 日韩成人在线视频观看| 久久亚洲精品网站| 国产精品福利在线观看网址| 亚洲成人精品在线| 狠狠躁18三区二区一区| 日韩美女视频免费在线观看| 在线观看国产精品91| 国产精品一区二区三区在线播放| 欧美日韩成人在线观看| 日韩av在线影视| 91精品在线看| 亚洲女人天堂色在线7777| 久久网福利资源网站| 日本一区二区在线播放| 欧美日韩性视频| 日韩在线观看免费高清完整版| 国产美女高潮久久白浆| 欧美成人精品在线观看| 精品一区精品二区| 亚洲欧美日韩精品久久奇米色影视| 91天堂在线观看| 久久91精品国产91久久久| 久久精品国产91精品亚洲| 欧美日韩日本国产| 欧美一级大片在线观看| 亚洲精品久久久久中文字幕二区| 精品高清一区二区三区| 在线观看欧美日韩| 欧美日韩精品二区| 欧美另类99xxxxx| 欧美精品xxx| 8090理伦午夜在线电影| 欧美亚洲视频在线观看| 国产精品三级久久久久久电影| 国产视频精品xxxx| 久久精品视频一| 久久五月天综合| 美日韩丰满少妇在线观看| 日韩成人在线视频| 国产精品日日摸夜夜添夜夜av| 久久网福利资源网站| 国产成人午夜视频网址| 亚洲欧洲中文天堂| 色噜噜久久综合伊人一本| 丁香五六月婷婷久久激情| 色诱女教师一区二区三区| 欧美精品激情blacked18| 久久偷看各类女兵18女厕嘘嘘| 九九热99久久久国产盗摄| 一级做a爰片久久毛片美女图片| 亚洲经典中文字幕| 国产精品99久久久久久白浆小说| 国产精品亚洲片夜色在线| 欧美夜福利tv在线| 亚洲欧美精品一区二区| 456国产精品| 欧美精品激情blacked18| www.精品av.com| 97av在线视频| 国产精品美女免费看| 欧美在线视频免费观看| 在线视频日本亚洲性| 亚洲国产女人aaa毛片在线| 九九精品视频在线| 国产精品1234| 日韩精品视频观看| 成人福利网站在线观看| 亚洲第一二三四五区| 亚洲欧美中文日韩在线v日本| 久久精品国产91精品亚洲| 亚洲成**性毛茸茸| 久久国产精品亚洲| 亚洲美女性视频| 日韩免费看的电影电视剧大全| 亚洲男人天堂手机在线| 97视频在线观看成人| 成人情趣片在线观看免费| 欧美大片在线看免费观看| 中文字幕欧美精品在线| 欧美一级黑人aaaaaaa做受| 精品色蜜蜜精品视频在线观看| 欧美激情第99页| 国产欧美一区二区三区四区| www.欧美精品一二三区| 国产一区二区在线播放| 精品成人av一区| 91tv亚洲精品香蕉国产一区7ujn| 国产精品吴梦梦| 国内精品免费午夜毛片| 亚洲精品一区中文字幕乱码| 日本一区二区在线免费播放| 国产精品久久久久久久7电影| 国产精品aaa| 午夜精品在线视频| 青青久久aⅴ北条麻妃| 成人日韩在线电影| 久久精品99久久久香蕉| 中文字幕精品网|