c++中的new关键字堆和栈的区别

new在堆上动态创建一个对象时实践上只做了3件事情:1.获得一块内存空间。2.调用构造函数 3.返回正确的指针。
new_handle 是一个没有参数的void函数的typedef ,用作set_new_handle的参数和返回类型。
当new分配内存失败时候,则调用一个new_handle后重新分配内存后重复此过程。
new是在堆上分配空间,堆上分配内存,即动态分配内存/理论上来说new一次最大能分配2G内存.
new创建类对象需要指针接受一次创建多次使用。new创建的对象需要勇delete销毁。new创建的对象在堆空间,局部变量不用new创建的对象则在栈空间。new对象指针用途广泛,比如作为函数返回值、函数参数等。
堆和栈的区别 :
栈由系统自动分配内存,用于存放函数参数值和局部变量等。
堆由开发人员进行分配和释放,若不释放,程序结束时则/由于操作系统自动回收。
空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64位 的 Windows 默认 1MB,64位的 Linux 默认 10MB
堆的内存生长方向向上 内存由低到高,栈的内存生长方向向下内存由高到低。
堆都是动态分配的,没有静态分配,栈二者都有,静态分配由OS完成如静态操作变量,动态分配由alloca函数分配。同时该动态分配是由操作系统进行的

发布了22 篇原创文章 · 获赞 2 · 访问量 2983

猜你喜欢

转载自blog.csdn.net/qq_40623603/article/details/105299237