紧跟Stackoverflow的新徽标设计的庆祝 Activity ,我很好奇sstk()在BSD和其他类似UNIX的操作系统中的意义是什么?

根据Linux内核系统调用接口(interface)手册页,sstk(2)应该:



但是,也要根据手册:



通过查看glibc's sstk.c source可以注意到

我的问题是,为什么要手动更改堆栈的大小? sbrk()和 friend 很有意义,但是在程序中手动重新调整堆栈大小的大小有什么用吗?

最佳答案

使用系统调用显式扩展堆栈的另一个可能的原因是,如果请求太大,您可以得到干净的错误指示,这与处理堆栈分配失败的常规方法相反(即,即使有分配,也不要尝试)失败,只需让进程崩溃即可。

很难确切地知道执行一些递归操作需要多少堆栈空间,但是您可以做出合理的猜测和sstk(guess*10)来确定。

关于c - sstk()系统调用不存在的用法示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32593900/

10-13 07:23