内存的分配方式有几种?
- 在栈上分配:在执行函数时,局部变量的内存都可以在栈上分配,函数结束时会自动释放;栈内存的分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限;
- 从堆上分配:就是那些由 new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个 delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收
- 从自由存储区分配:如果说堆是操作系统维护的一块内存,那么自由存储区就是C++中通过new和delete动态分配和释放对象的抽象概念。需要注意的是,自由存储区和堆比较像,但不等价
- 从常量存储区分配:特殊的存储区,存放的是常量,不可修改;
- 从全局/静态存储区分配:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量和静态变量又分为初始化的和未初始化的,在C++里面没有这个区分了,它们共同占用同一块内存区,在该区定义的变量若没有初始化,则会被自动初始化,例如int型变量自动初始为0
评论(6)
new是运算符可以重载,可以自定义返回值类型 内存分配在自由存储区,malloc则是函数不可以重载,只能在堆区分配内存,返回值也只能是void*类型的(要强制类型转换)。
从堆上分配是malloc和free吧,new不一定从堆上分配
自由存储区分配释放应该是new和delete吧,不知道自己理解的对不对
感谢提醒,已经更改
new和delete操作的内存块,是自由存储区,而不是malloc和free
感谢提醒,已经更改