C++中堆記憶體(heap)的概念和操作方法

來源:互聯網
上載者:User

堆記憶體是什麼呢?

我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態記憶體空間或者是在棧記憶體空間內的,但是在實際工作中,我們有時候卻需要動態為數組分配大小,在這裡c庫中的malloc.h標頭檔中的malloc()函數就為您解決了問題(bc或者是在老的標準中是alloc.h),它的函數原形是void* malloc(size_t size),在動態開闢的記憶體中,在使用完後我們要使用free()函數來釋放動態開闢的記憶體空間。

下面我們來看一個完整的例子:

//程式作者:管寧
//網站:www.cndev-lab.com
//所有稿件均有著作權,如要轉載,請務必著名出處和作者
#include <iostream>
#include <malloc.h>
using namespace std;
main()
{
int arraysize; //元素個數
int *array; //用於動態開闢數組的指標變數
cin>>arraysize;
array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆記憶體中開闢記憶體空間,它的大小是元素的個數乘以該資料類型的長度
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
free(array);//利用free釋放動態開闢的堆記憶體空間
cin.get();
cin.get();
}

這裡要特別注意個地方就是:

array=(int*)malloc(arraysize * sizeof(int));

malloc()的函數原形本身是void* malloc(size_t size),由於動態分配的空間電腦並不知道是用來做什麼的所以是無類型的,但你要把它用在動態整形數組上的時候就要顯式的轉換成int*了。

下面我們再介紹c++所專屬的開闢和釋放堆記憶體空間的方法,new修飾符和delete修飾符。

new和delete修飾符的操作並不需要標頭檔的支援,這是c++所專屬的,new操作要比malloc更為簡單,直接說明開闢的類型的數目就可以了,delete使用的時候如果是數組那麼必須使用delete[]。

//程式作者:管寧
//網站:www.cndev-lab.com
//所有稿件均有著作權,如要轉載,請務必著名出處和作者
#include <iostream>
using namespace std;
main()
{
int arraysize; //元素個數
int *array;
cin>>arraysize;
array=new int[arraysize];//開闢堆記憶體
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
delete[] array;//釋放堆記憶體
cin.get();
cin.get();
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.