C/C++动态内存管理

C语言动态内存管理
申请内存的方式

栈上(静态内存管理)
1.生命周期随栈帧。栈帧结束,内存归还给操作系统,无需程序猿管理。

2.空间开辟的大小固定,申请数组时数组的大小必须指定。他内存在编译时期就已经分配好。

3.程序在运行时期不能进行内存申请。而这种情况在编程中又很常见。所以就需要动态内存管理。

堆上(动态内存管理)
1.生命周期由程序猿管理。需要手动申请手动释放。且必须释放,否则就会造成内存泄露

2.开辟空间大小由程序猿指定,更灵活。空间分配在程序运行期间分配。

对比:栈上申请内存比较省心,规规矩矩。缺乏灵活性,而堆上申请内存更为灵活。但是灵活也就意味着风险。如果只申请,不释放,就会造成内存泄露。释放的内存的申请的内存要匹配。   

  
  int
*p = (int *)malloc(20*sizeof(int)); int *pp = (int *)calloc(20, sizeof(int)); int i; printf("malloc申请的空间值:\n\n"); for ( i=0 ; i < 20; i++) { printf("%d ", *p++); } printf("\n\n"); printf("calloc申请的空间的值:\n\n"); for ( i=0 ; i < 20; i++) { printf("%d ", *pp++); }   free(p);   free(pp);
class Array
{
    public:
        Array(size_t size=10)
            :_size(size)
            ,_a(0)
    {
        cout<<"Array(size_t size)"<<endl;
        if(size>0)
        {
            _a=new int[size];
        }
    }
        ~Array()
        {
            cout<<"~Array()"<<endl;
            if(_a)
            {
                delete[]_a;
                _a=0;
                _size=0;
            }

        }
    private:
        int * _a;
        size_t _size;
};
int main()
{
    Array* p1=new Array;
    delete p1;
    Array* p2=new Array[5];
    delete []p2;
    return 0;

}
12-16 23:17
查看更多