gpt4 book ai didi

c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:03 25 4
gpt4 key购买 nike

在 C++ 中,你 can安排一个函数在 new 失败时调用。有没有办法在 malloc 失败时调用一个函数?假设正在从我不想更改的第三方库调用 malloc

我认为没有可移植的答案,所以我很乐意接受特定于平台的答案。我在某些平台上使用 Linux+uclibc,在其他平台上使用 Linux+glibc。我打算使用 setrlimit限制 malloc 可以返回的内存量。

最佳答案

malloc 如果失败则返回 NULL。您应该处理它,以及 CRT 内存函数的其他故障(realloc 尤其容易出错)。

在一般情况下,我认为您必须将内存的所有 CRT 使用包装在您自己设计的函数中,以在错误时重定向。

在 Windows 上,您可以使用 Allocation Hook Functions 连接到 CRT ,这可能是一种做你想做的事情的方法。这为您提供了一个 Hook ,用于通过 onalloconrealloconfree 的逻辑有效地处理 CRT 调用。

我不能保证,因为我是 Windows 用户,但它看起来像 malloc_hook on Linux提供与 Windows Hook 允许的相同。这些方法应该使您能够捕获所有 CRT 内存调用而无需更改第三方库中的代码,假设它们在运行时都使用相同的 CRT - 这总是一个好主意,但至少在 Windows 上不能保证...

关于c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305966/

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