当您在 C 中初始化堆栈上的变量时,后端会发生什么?
What happens in the backend when you initialize a variable on the stack in C?
当我声明一个变量时 int b;
后端实际发生了什么?它会转换为 int* b = malloc(sizeof(int))
,只是它会受范围约束吗?我了解堆栈上的变量受范围约束,堆不一定受范围约束,但在后端,分配是否类似?希望我解释得足够好,以便有人纠正我
大多数 CPU 都有一个寄存器,用作 运行 线程的“堆栈指针”;它总是指向线程堆栈的“顶部”。每当需要创建新的堆栈对象时,都会在堆栈指针当前指向的地址处初始化对象,然后堆栈指针的值增加对象的大小。
类似地,在销毁堆栈对象后(因为执行正在离开当前范围),堆栈指针会减少对象的大小。
仅此而已;它比操纵堆更简单、更有效。唯一的缺点是 space 必须按照严格的 FILO 顺序进行初始化和取消初始化——即对象必须按照与构造它们的顺序相反的顺序销毁。
当我声明一个变量时 int b;
后端实际发生了什么?它会转换为 int* b = malloc(sizeof(int))
,只是它会受范围约束吗?我了解堆栈上的变量受范围约束,堆不一定受范围约束,但在后端,分配是否类似?希望我解释得足够好,以便有人纠正我
大多数 CPU 都有一个寄存器,用作 运行 线程的“堆栈指针”;它总是指向线程堆栈的“顶部”。每当需要创建新的堆栈对象时,都会在堆栈指针当前指向的地址处初始化对象,然后堆栈指针的值增加对象的大小。
类似地,在销毁堆栈对象后(因为执行正在离开当前范围),堆栈指针会减少对象的大小。
仅此而已;它比操纵堆更简单、更有效。唯一的缺点是 space 必须按照严格的 FILO 顺序进行初始化和取消初始化——即对象必须按照与构造它们的顺序相反的顺序销毁。