gpt4 book ai didi

C alloca 函数 - 当尝试分配太多内存时会发生什么

转载 作者:行者123 更新时间:2023-12-02 08:35:17 26 4
gpt4 key购买 nike

在 C 中,alloca() 函数在 alloca() 的调用者的栈帧上分配内存。

当您尝试分配它不可能分配的大量字节时会发生什么?

  • 它是否分配尽可能多的字节直到堆栈遇到堆段?
  • 或者它根本不分配任何东西?

    分配(100000000000000000000);

手册中提到:

The alloca() function returns a pointer to the beginning of the allocated space. If the allocation causes stack overflow, program behavior is undefined.

我了解该行为未定义。但必须要说的不止于此:

  • 它返回什么,指向调用 main 之前栈顶之后的第一个字节的指针?
  • alloca() 返回后堆栈指针与调用 alloca() 之前的不同吗?

有人有这方面的更多信息吗?

最佳答案

会发生什么取决于您的编译器和使用的加固选项;通常,您没有迹象表明它失败了,您要么破坏随机无关的内存,要么在调用 alloca 后不久崩溃。通过一些强化选项,您可能能够使崩溃可靠,但您永远无法检测到故障并从故障中恢复。 alloca 根本不应该被使用。这是一个严重的错误,看起来好得令人难以置信,因为它确实如此。

关于C alloca 函数 - 当尝试分配太多内存时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338739/

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