美文网首页
C,C++内存分配

C,C++内存分配

作者: 潇洒人生_cca2 | 来源:发表于2020-04-05 10:37 被阅读0次

C语言内存分配:

静态内存分配,分配内存大小的是固定,问题:1.很容易超出栈内存的最大值 2.为了防止内存不够用会开辟更多的内存,容易浪费内存

动态内存分配,在程序运行过程中,动态指定需要使用的内存大小,手动释放,释放之后这些内存还可以被重新使用(活水)

1.栈区(stack)

windows下,栈内存分配2M(确定的常数),超出了限制,提示stack overflow错误

自动分配,释放

2.堆区(heap)

在程序运行过程中,可以随意的开辟指定大小的内存,以供使用,相当于Java中的集合

程序员手动分配释放,malloc分配内存,返回指针(p),free(p)释放内存,然后把指针置空。操作系统80%内存

创建一个数组,动态指定数组的大小,返回P指向内存起点。

realloc 重新分配内存

int* p2 = realloc(p, sizeof(int) * (len + addLen));1.原来内存的指针 2.内存扩大之后的总大小,只需要释放P2,P1也就被释放了。

重新分配内存的两种情况:

1.缩小,缩小的那一部分数据会丢失

2.扩大,(连续的)

1.如果当前内存段后面有需要的内存空间,直接扩展这段内存空间,realloc返回原指针 2.如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据库释放掉,返回新的内存地址 3.如果申请失败,返回NULL,原来的指针仍然有效

3.全局区或静态区

4.字符常量区

5.程序代码区

内存分配的几个注意细节

1.不能多次释放

2.释放完之后(指针仍然有值),给指针置NULL,标志释放完成

3.内存泄露(p重新赋值之后,再free,并没有真正释放内存)

C++动态内存分配

C++ 通过new(delete)动态内存分配
使用C的写法不会调用构造方法,C++写法调用构造方法

class Teacher{
private:
    char* name;
public:
    Teacher(char* name){
        this->name = name;
        cout << "Teacher有参构造函数" << endl;
    }
    ~Teacher(){
        cout << "Teacher析构函数" << endl;
    }
    void setName(char* name){
        this->name = name;
    }
    char* getName(){
        return this->name;
    }
};

void func(){
    //C++   
    //会调用构造和析构函数
    Teacher *t1 = new Teacher("jack");
    cout << t1->getName() << endl;
    //释放
    delete t1;
    //C
    //Teacher *t2 = (Teacher*)malloc(sizeof(Teacher));
    //t2->setName("jack");
    //free(t2);
}

void main(){
    func();
    //数组类型
    //C
    //int *p1 = (int*)malloc(sizeof(int) * 10);
    //p1[0] = 9;
    //free(p1);
    //C++
    int *p2 = new int[10];
    p2[0] = 2;
    //释放数组 []
    delete[] p2;
    system("pause");
}

相关文章

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • C++ 内存分配和管理

    C++ 内存分配和管理

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • 【重要】第二章:Java内存区域与内存溢出异常

    Java VS C++ : 内存动态分配和垃圾收集技术 2.1 概述 C/C++: 自己分配,自己维护Java: ...

  • c++内存分配方式

    c++内存分配方式 1.内存分配简单介绍: 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(sta...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • android 内存泄漏全面解析

    引言: C/C++ 自己去分配内存和释放内存--手动管理 malloc free 什么是内存泄露:内存不在GC掌...

  • Android中缓存理解(一)

    Java GarbageCollection(GC) Java不能像C/C++那样直接对内存进行操作(内存分配和垃...

  • C++ 内存分配

    (JG-2014-08-20)(前半部分经过网上多篇文章对比整理)(后半部分根据ExceptionalCpp、C+...

  • 内存优化(一)内存泄漏

    1.内存泄漏 C/C++ 自己去分配内存和释放内存——手动管理malloc和free 1.1.什么是内存泄露:内存...

网友评论

      本文标题:C,C++内存分配

      本文链接:https://www.haomeiwen.com/subject/yhqqdctx.html