malloc/free和new/delete的共同点是:必须从堆中申请空间并手动释放。 申请连续的空间通常是两个g,不同之处是:
1.malloc和free是函数,new和delete是操作员
2.malloc申请的空间不初始化,new可以初始化
3.malloc在申请空间时,必须手动计算空间大小并传递。 new只是跟在空间类型之后。 对于多个对象,可以在中指定对象的数量。
4.malloc的返回值类型为void*,使用时必须用力转动。 不需要新闻。 这是因为new后面跟着空间的类型
5 .如果5.malloc在空间申请中失败,则返回的是NULL,因此在使用时必须确定为空。 虽然不需要新闻,但是新闻需要捕捉异常
6 .申请自定义类型的对象时,malloc/free只会打开空间,而不会调用构造函数和析构函数。 另一方面,new在申请空间后调用构造函数以完成对象初始化,delete在释放空间前调用析构函数以完成空间中资源的清理
7.malloc/new申请空间本质上给了你一个内存的实用权,不再使用空间,free/delete释放内存空间的本质是,将使用权返还给系统,系统可以重新分配给其他人。
全局变量位于数据段的静态全局变量位于静态区域
静态局部变量静态区域局部变量堆栈区域
使用char* p=new char[100]请求内存,然后使用delete p释放。 对于嵌入式,delete相当于free;对于自定义类型,需要delete []来释放堆上的空间。
堆不能静态分配内存,只能动态申请
堆栈可以用函数_alloca动态分配,但不能用free或delete释放分配的空间