澄清 run-time/compile-time 和 heap/stack

Clarification on run-time/compile-time and heap/stack

(如果我的标题不正确,请原谅,我相信它具有约束力,但如果有任何事情让我知道,我会编辑 title/question)

了解在编程中绑定数据的不同方法(无特定语言)我们了解了 5 种类型。 (我给出了类型,定义在class,下面是我的问题)

1) Static:下标范围是静态绑定的,存储分配是静态的(在 run-time 之前)

2) 已修复stack-dynamic:下标范围是静态绑定的,但分配是在声明时完成的

3) Stack-dynamic:下标范围是动态绑定的,存储分配是动态的(在run-time完成)

4) Fixed Heap-dynamic: 类似于 fixed stack-dynamic: 存储绑定是动态的,但在分配后是固定的(即绑定在请求时完成,并且存储是从堆中分配的,而不是堆栈)

我想考虑一下你的时间,如果这些问题可能很初级,我很抱歉,但在问了别人和谷歌搜索之后,我得到了不同的答案,不知道该相信什么

5) Heap-dynamic:下标范围和存储分配的绑定是动态的,可以更改任意次数

"Before run-time"表示在创建程序实例时分配内存(当您选择启动程序时,操作系统会这样做),但在程序开始执行之前。

是的,你是正确的,const int 的值在编译时是已知的,因此编译器可以在编译时使用它来知道数组的大小。 如果您改用变量,则必须在 运行 时间动态分配数组。

"Stack-dynamic"表示变量是在函数调用时创建的,比如函数的参数。它们是 运行-time 和临时的,存在于堆栈中。它们的大小在编译时未知。

您的 "fixed heap dynamic" 示例可能不正确,因为我假设您是在暗示一个变量而不是常量来说明数组的大小。 "Fixed" 在编译时已知,因此您需要使用 constant/literal。 "Fixed heap dynamic" 是一个固定大小的数组,但是在堆上动态分配。

"Heap-dynamic" 并不意味着尺寸可以改变,而是尺寸只有在 运行 时才知道。数组不能自然地改变大小,因为你不能保证它旁边有任何更多的连续内存可以增长。使数组变大通常意味着您必须创建一个新的、更大的数组,并将旧的内容复制到其中,并删除旧的、更小的数组。