当我在 SO 上时,我读了很多指导评论(尤其是 C 语言)
“动态分配总是在堆上,自动分配在堆栈上”
但特别是对于普通 C 我不同意这一点。因为 ISO/IEC9899 甚至没有丢弃堆或堆栈的任何字。它只是提到了三种存储持续时间(静态、自动和分配),并建议如何处理它们中的每一个。
如果编译器愿意的话,什么可以让编译器选择这样做,反之亦然。
所以我的问题是:
堆和栈是否物理存在(即使不是在 C 语言中),标准化语言可以说“……必须发生在堆上,而……发生在栈上”?
或者它们只是一个管理内存访问的虚拟系统,因此语言无法对它们制定规则,因为甚至无法确保环境支持它们?
在我的知识库中,只有第二个才有意义。但我已经读过很多次人们写的评论,比如“在 XY 语言中,这将发生在堆栈/堆上”。但如果我是对的,只要该语言不仅仅是为保证有堆栈和堆的系统而设计的,那么这一定是不确定的。所有这些评论都是错误的。
这就是我问这个问题的原因。是我错了,还是在推理过程中存在很大的错误?
您是正确的,C 规范不需要使用堆或堆栈,只要它正确实现存储类即可。
然而,实际上每个编译器都会使用堆栈来存储自动变量,使用堆来存储分配变量。虽然您可以实现不使用堆栈或堆的编译器,但它的性能可能不会很好,并且大多数开发人员都不熟悉。
因此,当人们说“总是”时,他们真正的意思是“几乎总是”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)