gpt4 book ai didi

c - 如何在 Mac OS X 上通过 C API 获取当前线程的堆栈大小? (不含 cocoa 或碳)

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:37 24 4
gpt4 key购买 nike

在Unix中,有getrusage函数来获取资源状态。它也在 Mac OS X 中,但它不起作用。 Cocoa 上有预先实现的 API(我不知道 Carbon),

-[NSthread stackSize]

但我必须只使用 C API 来实现它。

与之等效的 C API 是什么?

最佳答案

您必须在 创建线程之前执行此操作,方法是初始化 pthread_attr_t 对象并对其调用 pthread_attr_getstacksize。如果您知道当前线程是使用默认属性创建的,您可能可以将测试推迟到以后,但这听起来是个坏主意。

话虽如此,我认为无论如何测试默认值都是无用的。如果您知道需要大堆栈,请在创建线程之前显式设置大堆栈大小。如果你知道你只需要一个小堆栈,明确地设置它并享受内存节省。我建议不要低于 32k,除非你知道你不会使用任何库函数或递归(在这种情况下 4k 可能没问题),也不要超过 256k,除非你打算进行一些深度递归。我用来获得安全的递归堆栈大小的粗略估计是:

levels_of_recursion * (128 + total_size_of_locals) + (using_lib ? 32768 : 4096)

关于c - 如何在 Mac OS X 上通过 C API 获取当前线程的堆栈大小? (不含 cocoa 或碳),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784387/

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