【问题标题】:Does the C language specify a stack? [duplicate]C语言是否指定了堆栈? [复制]
【发布时间】:2019-06-01 17:16:48
【问题描述】:

C 语言定义是否需要存在堆栈?不支持堆栈的架构怎么办?这是否意味着这样的架构无法实现定义的 C 语言?

堆呢?

【问题讨论】:

  • c 不需要栈
  • C 语言的定义没有提到栈和堆。

标签: c stack


【解决方案1】:

没有。

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

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

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

许多看起来很奇怪的标准规则正是为了让不寻常的 CPU 架构能够运行标准 C。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多