zoukankan      html  css  js  c++  java
  • 《挑战30天C++入门极限》新手入门:C++中堆内存(heap)的概念和操作方法

     
     

    新手入门: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(); 
    }  

     
     
  • 相关阅读:
    Tensorflow笔记:反向传播,搭建神经网络的八股,(损失函数loss,均方误差MSE,反向传播训练方法,学习率)
    Tensorflow笔记:神经网络的参数,神经网络的搭建,神经网络的前向传播
    Tensorflow笔记:tensorflow 的基本概念(张量,数据类型,计算图,会话)
    PAT (Advanced Level) Practice 1001 A+B Format
    深度学习Tensorflow 之 MNIST手写数字识别
    MNIST数据集介绍及读取
    深度学习Tensorflow非线性回归案列
    TensorFlow 完整的TensorFlow入门教程
    centos7 解决下载速度慢的问题
    Structs复习 ActionMethod
  • 原文地址:https://www.cnblogs.com/landv/p/11184722.html
Copyright © 2011-2022 走看看