C语言是否指定堆栈?

时间:2019-01-07 01:42:50

标签: c stack

C语言定义是否需要堆栈?不支持堆栈的架构又如何呢?这是否意味着此类架构无法实现定义的C语言?

那堆呢?

1 个答案:

答案 0 :(得分:3)

否。

C11 standard不包含单词stack,也不包含单词heap。这意味着它不需要名称。

如果架构没有堆栈,则它必须仍然具有一种机制,以允许被调用的函数为其变量分配空间,即使递归调用也是如此。只要CPU允许编译器编写者以某种方式实现这样的系统,CPU就可以支持C。堆栈是处理按功能分配变量的一种简便方法,但它远非唯一可行的机制。

如果您使用的是托管实现(而不是独立实现),则该实现需要通过malloc()free()和朋友支持动态内存分配。通常,这是通过在“堆”上使用空间来完成的,但是该标准并未规定必须如何发生,只是规定必须针对平台进行适当的管理。

许多似乎离奇的标准规则正是为了使异常的CPU体系结构运行标准C成为可能。