gpt4 book ai didi

c - 是否可以估计调用函数在堆栈中需要的大小?

转载 作者:行者123 更新时间:2023-11-30 16:03:45 25 4
gpt4 key购买 nike

我正在尝试理解另一位程序员的 C 代码。有时我会遇到段错误,我认为这可能是由于堆栈溢出造成的。我想知道在 Visual Studio(或其他方式)中是否可以以一种简单的方式估计在调用函数时创建变量时堆栈所需的大小。

谢谢

最佳答案

堆栈上帧的大小大致为传入参数大小的总和加上局部变量大小的总和。还有一些额外的返回地址、基指针,也许还有一些用于检查堆栈溢出的保护 cookie。

示例:

int foo(int x, int y, char *string) {
int array[10000];
// ...
}

VC++ 中的整数每个为 4 个字节。指针在 32 位可执行文件中为 4 个字节,在 64 位可执行文件中为 8 个字节。所以参数加起来就是4+4+8。本地数组为 40,000 字节。该函数消耗大约 40 KB 的堆栈。您可以在堆栈溢出之前添加很多内容。

Windows 程序中实际的堆栈溢出通常仅在失控递归时发生。默认堆栈大小相当大 (1 MB)。溢出堆栈上的缓冲区可能会导致堆栈损坏。

您的崩溃很可能与访问超出其范围的数组或通过未指向有效内存的指针(例如 NULL 指针)进行访问有关。

关于c - 是否可以估计调用函数在堆栈中需要的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3761688/

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