栈和堆都能动态或静态分配内存空间吗?
一、结论
堆只能通过动态申请分配内存空间,而栈两者方式都可以!
堆就不多说了,只能通过malloc、new等方式动态申请分配内存空间。下面来聊聊栈的两者申请方式。
二、栈静态分配内存空间
静态分配:在编译阶段即可确定对象的空间大小。最典型的就是:在一个函数中创建了一个数组,这就是一种栈的静态分配。
三、栈动态分配内存空间
在Linux,提供了一个名为alloca的函数,和malloc类似,不同在于alloca是在栈上申请内存空间,并且不需要手动释放,内存会在栈退出时自动释放。但alloca不宜使用在必须广泛移植的程序中,有些机器不一定具有传统意义上的"栈/堆"。

函数原型:
void* alloca(size_t size)
size为待申请栈的大小,void*返回申请空间的地址。失败时(size 过大),可能会存在栈溢出问题(可能会指向堆区或者其它区域)
本文探讨了栈和堆在内存分配上的差异,强调了堆仅支持动态分配,而栈既可静态也可通过alloca进行动态分配,但alloca有栈溢出风险且不适用于跨平台程序。
2717

被折叠的 条评论
为什么被折叠?



