gpt4 book ai didi

c - 如何仅在编译时确定堆栈区域中的内存量?

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:51 25 4
gpt4 key购买 nike

激活记录是在堆栈中创建的。这些在程序运行期间创建和销毁 - 即堆栈区域在程序运行期间改变其大小。

即使堆栈区域中的内存是在运行时创建的,内存量(激活记录大小)也是在编译时确定的。

我不明白在运行时创建堆栈区域中的内存时,如何在编译时确定激活记录的大小?

最佳答案

当操作系统启动一个进程时,它会为该进程分配固定数量的空间,用作堆栈。函数开始或结束时不会创建或销毁内存。它是从堆栈上未使用的任何东西的顶部借来的。

当一个函数被调用时,它会获取一个堆栈空间(在堆栈的顶部),它将自己使用(用于变量)。编译器可以扫描一个函数并提前计算所有这些,因为它不需要允许对每个函数进行函数调用 - 它们都是独立处理的。

当函数存在时,它会释放堆栈空间(只需将堆栈指针调整回原来的状态)并返回给调用者。

由于每个被调用的函数都有自己的预留空间并且没有栈顶空间,编译器不需要允许在其他函数中调用的函数使用栈空间。每个函数始终从堆栈的现有顶部(可用空间所在的位置)开始工作。

Malloc() 使用与堆栈分开的堆内存。只有局部变量使用堆栈。有一个名为 alloca() 的不安全函数也使用堆栈,但通常不使用它,因为不能依赖它返回有效指针。

关于c - 如何仅在编译时确定堆栈区域中的内存量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34120001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com