我们有在Windows和Linux系统中在堆栈上分配内存的功能,但是不鼓励它们使用它们也不是C标准的一部分?这意味着它们提供了一些非标准行为.由于我没有经验,我无法理解从堆栈分配内存而不是使用堆时可能出现的问题?
谢谢.
编辑:我的观点:由于Delan已经解释过分配给程序的堆栈数量是在编译期间决定的,所以如果我们用完它就不能从操作系统中请求更多的堆栈.唯一的出路就是崩溃.所以最好留下堆栈来存储诸如变量,函数,函数调用,数组,结构等主要内容,并使用堆与OS /机器的容量一样多.
堆栈内存的优点是,堆内存的分配速度通常更快.
然而,至少在特定情况下,其问题alloca(3)在于,在许多实现中,它仅减少堆栈指针,而不考虑或通知是否实际上存在任何堆栈空间.
堆栈内存在编译或运行时固定,并且在需要更多内存时不会动态扩展.如果用完堆栈空间并调用alloca,则有可能获得指向非堆栈内存的指针.您无法知道是否导致堆栈溢出.
附录:这并不意味着我们不应该使用动态分配堆栈内存; 如果你是
然后堆栈分配很好,甚至可以有利于节省时间(堆栈指针的运动发生的一切)和内存(你正在使用预先分配的堆栈,而不是进入堆中).