当我在SO上时,我读了许多引导的评论(特别是在C中)
"动态分配总是进入堆,在堆栈上自动分配"
但特别是对于普通的C我不同意。因为ISO / IEC9899甚至不会丢弃堆或堆栈。它只提到了三个存储变量(静态,自动和分配),并建议如何处理它们。
如果想要,编译器可以选择执行它,反之亦然。
所以我的问题是:
堆栈和堆栈物理存在(即使不是在C中)标准化语言可以说" ...必须发生在堆上并且......在堆栈上#34;?
或者他们只是一个管理记忆访问的虚拟系统,以便语言不能制定规则,因为它甚至可以确保环境支持他们?
在我的知识库中,只有第二个才有意义。但是我已经多次读过人们写评论和#34;在语言XY中,这将发生在堆栈/堆上#34;。但是,如果我说得对,这必须是不确定的,只要语言不是为了保证有堆栈和堆的系统而做的。所有的评论都是错误的。
这是让我问这个问题的原因。我错了,或者在推理中出现了很大的错误?
答案 0 :(得分:2)
你是正确的,因为C规范不需要使用堆或堆栈,只要它正确地实现存储类。
但是,几乎每个编译器都会使用堆栈作为自动变量,而堆栈则用于分配的变量。虽然你可以实现一个不使用堆栈或堆的编译器,但它可能不会很好地执行,并且对大多数开发人员来说都不熟悉。
因此,当人们说“永远”时,他们的意思是“几乎总是”。