新手入門:C++中堆內存(heap)的概念和操作方法

堆內存是什麽呢?

我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的爲數組分配大小,

在這裏c庫中的malloc.h頭文件中的malloc()函數就爲您解決了問題(bc或者是在老的標准中是alloc.h),它的函數原形是void* malloc(size_t size),在動態開辟的內存中,在使用完後我們要使用free()函數來釋放動態開辟的內存空間。

下面我們來看一個完整的例子:#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[]。#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();

}

新手入門:C++中堆內存(heap)的概念和操作方法
更多內容請看C/C++技術學堂 C/C++技術專題 C/C++進階技術文檔專題,或

C++中堆內存的概念和操作方法入門
  堆內存(heap)是什麽呢?  我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的爲數組分配大小,在這裏c庫中的m...查看完整版>>C++中堆內存的概念和操作方法入門
 
c++中關于堆內存(heap)的概念和操作方法的教程
  堆內存是什麽呢? 我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的爲數組分配大小,在這裏c庫中的malloc.h頭...查看完整版>>c++中關于堆內存(heap)的概念和操作方法的教程
 
Visual C++ 小內存堆(Small Block Heap)問題
摘要Visual C++ 6.0 最近的版本包含了一個高度優化的隊管理器,並由此將應用程序性能提高到 Visual C++ 5.0的400%。但是,重新設計的堆可能會由于用戶用Visual C++ 5.0編寫的應用程序當中的有關內存分配和釋放方面的...查看完整版>>Visual C++ 小內存堆(Small Block Heap)問題
 
新手入門:C/C++中枚舉類型(enum)
  假如一個變量你需要幾種可能存在的值,那麽就可以被定義成爲枚舉類型。之所以叫枚舉就是說將變量或者叫對象可能存在的情況也可以說是可能的值一一例舉出來。 ...查看完整版>>新手入門:C/C++中枚舉類型(enum)
 
新手入門:關于C++中的內聯函數(inline)
  在c++中,爲了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧內存的問題,非凡的引入了inline修飾符,表示爲內聯函數。 ...查看完整版>>新手入門:關于C++中的內聯函數(inline)
 
新手入門:C/C++中的結構體
  什麽是結構體?   簡單的來說,結構體就是一個可以包含不同數據類型的一個結構,它是一種可以自己定義的數據類型,它的特點和數組主要有兩點不同,首先結構體可以在一個結構中聲明不同的數據類型,第二相同結構...查看完整版>>新手入門:C/C++中的結構體
 
C++ young 程序庫——y_algorithm_heap.hpp
文件位置:young/algoithm/y_algorithm_heap.hpp/*The young LibraryCopyright (c) 2005 by 楊桓Permission to use, copy, modify, distribute and sell this software for anypurpose is hereby granted without fe...查看完整版>>C++ young 程序庫——y_algorithm_heap.hpp
 
C++中要求(或禁止)對象産生于heap中
  要求對象産生于Heap之中  考慮如下代碼:classHeapClass{ public:  voidDestory() const {deletethis;} private:  ~HeapClass(){}};HeapClass* ptr = newHeapClass;ptr->Destory();  這樣的調用真是...查看完整版>>C++中要求(或禁止)對象産生于heap中
 
Stack & Heap in C/C++
一、預備知識—程序的內存分配 一個由c/C++編譯的程序占用的內存分爲以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。 2、堆區(heap)...查看完整版>>Stack & Heap in C/C++
 
 
回到王朝網路移動版首頁