典型C內存空間分布圖


  下圖是一個典型的C內存空間分布圖

 

  這是Linux下32位環境的用戶空間內存分布情況

  內核空間  :一部分核心軟件獨立於普通應用程序,運行在較高的特權級別上,駐留在被保護的內存空間上,擁有訪問硬件設備的所有權限

  內存棧區  :存放函數的參數值,局部變量的值等,在程序運行時由編譯器自動分配。

  內存堆區  :存放new或者malloc出來的對象。如main函數里面定義的。

  全局靜態區    :  存放全局變量,局部靜態(static)變量和全局靜態變量,初始化的全局變量和靜態變量data段,為初始化的全局變量和靜態變量放在bss段。

  常量區   :存放一般常量和字符串常量

  代碼區   :存放二進制代碼,只讀,可共享

  C/C++不提供垃圾回收機制,因此需要對堆中的數據進行及時銷毀,防止內存泄露,使用free和delete銷毀new和malloc申請的堆內存,而棧內存時動態釋放。

  

#include <iostream>
using namespace std; int arr[10];            //數組未初始化,空間開辟在bss段上
int arr2[10] = {1,2,3,4,5,6,7,8,9,10};  //數組已初始化,空間開辟在data段

int main() { int arr3[10];        //空間開辟在棧上面
  int a = 10;          //空間開辟在棧上面

  int *p = new int[10];   //空間開辟在堆上面

  static int data;      //未初始化靜態變量,空間開辟在bss段上
  static int data2 = 100;//初始化靜態變量,空間開辟在data段上

  return 0; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM