程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++內存管理不同方式分析

C++內存管理不同方式分析

編輯:C++入門知識

C++編程語言是一個應用廣泛,功能強大的C語言升級版本。其中有很多內容都需要我們不斷的去摸索。在這裡我們先來了解一下有關C++內存管理的相關知識,讓大家對C++對內存操作的相關知識能有一個充分的了解。

  • C++函數模板非類型參數應用注意事項總結
  • C++ typename不同應用方式介紹
  • C++內存分配應用技巧分享
  • C++ cpuid指令正確理解
  • C++獲取CPU信息應用經驗分享

1. 使用new動態分配內存:若沒有足夠內存,則new返回0空值指針null pointer);

2. 不要使用delete釋放不是new分配的內存,delete釋放指針指向的內存,但不會刪除指針本身;

3、對空值指針應用delete是安全的;

4、創建數組時的靜態聯編與動態聯編:數組聲名int a[10], 靜態聯編,數組的長度在編譯時確定;

用new[]創建數組,動態聯編,運行時為數組分配內存空間。動態-運行時分配內存。

C++內存管理總共有三種方式:自動存儲、靜態存儲、動態存儲自由存儲空間或堆)(三塊獨立的內存)

自動存儲:(auto / register ) 自動變量的持久性為自動的,在程序開始執行其所屬的函數或代碼塊時創建,執行 完後釋放。

  1. auto: in stack LIFO   
  2. register: in CPU register 

使用寄存器處理變量,提高訪問速度;沒有內存地址,不能用&取地址。

靜態存儲:(global / static ) 在程序整個運行期間都存在. (外部鏈接性、內部鏈接性、無鏈接性)初始化為0。

  1. int global = 1000; //外部鏈接性,可在程序的其他文件使用, 
    使用時要用extern聲名 (外部變量/全局變量)  
  2. static int one_file = 50; 
    //內部鏈接性,只能在本文件使用 函數如果為static也一樣,只能在該文件中被調)  
  3. int main(){ ... }  
  4. void func(){  
  5. static int count = 0; //靜態局部變量,只在該代碼中可用,
    但它在該代碼不活動時始終存在。  

可用extern重新聲名以前定義過的外部變量;

訪問被隱藏的外部變量被局部變量隱藏了):用作用域解析符::)::n 表示使用n的全局版本

  1. const char * const months[12] = {"Jan", "Feb", "Mar",...}; 

第一個const防止字符串被修改,第二個const確保數組中每個指針始終指向它最初指向的字符串。

mutable限定符:const/volatile/mutable const禁止修改結構成員,但是mutable使const結構中的成員不受這種限制

  1. struct data { char name[30]; mutable int accesses; };  
  2. const data a = {....}; strcpy(a.name, "fdsf"); 
    //not allowed a.access++//allowed 

外部定義的const數據的鏈接性為內部的,跟static一樣

動態存儲:(free store / heap) new/delete, malloc/free

1、使用new來設置指針的語句必須位於函數中,因為只能使用常量表達式來初始化靜態存儲變量:

  1. float * p;  
  2. //float *p = new float[20]; 
    //initialization with non-const not allowed here  
  3. main (){ p = new float[20]; } 

2、布局new操作符 placement new): 自己指定空間為placement new提供內存空間,而不是在heap中分配

  1. #include< new> 
  2. char buffer[512];  
  3. ......double *pd1, *pd2;  
  4. pd1 = new double[N];  
  5. pd2 = new (buffer) double[N]; 

以上就是我們對C++內存管理的相關介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved