gpt4 book ai didi

c - 获取 HP-UX 11 中当前线程的堆栈大小

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

我正在尝试获取在 HP-UX 11.31 上运行的应用程序中当前线程的堆栈大小。

在 Linux 上我使用 pthread_getattr_np,在 Solaris 上我可以使用 thr_stksegment

请帮助我找到一种方法来了解 C 上的线程堆栈大小。

最佳答案

我在 webkit sources 中找到了这个问题的解决方案.但如果应用程序的高性能对您来说非常重要,则此解决方案不适合,因为创建和挂起线程是昂贵的操作。

我用 size 替换了 base 词,因为在 webkit 源中我们正在寻找堆栈基数,而不是大小。示例代码:

struct hpux_get_stack_size_data
{
pthread_t thread;
_pthread_stack_info info;
};

static void *hpux_get_stack_size_internal(void *d)
{
hpux_get_stack_base_data *data = static_cast<hpux_get_stack_size_data *>(d);

// _pthread_stack_info_np requires the target thread to be suspended
// in order to get information about it
pthread_suspend(data->thread);

// _pthread_stack_info_np returns an errno code in case of failure
// or zero on success
if (_pthread_stack_info_np(data->thread, &data->info)) {
// failed
return 0;
}

pthread_continue(data->thread);

return data;
}

static void *hpux_get_stack_size()
{
hpux_get_stack_size_data data;
data.thread = pthread_self();
// We cannot get the stack information for the current thread
// So we start a new thread to get that information and return it to us
pthread_t other;
pthread_create(&other, 0, hpux_get_stack_size_internal, &data);
void *result;
pthread_join(other, &result);
if (result)
return data.info.stk_stack_size;

return 0;
}

关于c - 获取 HP-UX 11 中当前线程的堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374660/

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