微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不存在的sstk系统调用的用法示例?

保持Stackoverflow的新标志devise的庆祝活动,我很好奇sstk()在BSD和其他类UNIX操作系统中应该是什么意思?

根据Linux内核系统调用接口manpages, sstk(2)应该是:

… [更改]堆栈区域的大小。 堆栈区域也根据需要自动扩展。 在VAX上,文本和数据区域在P0区域相邻,而堆栈区域在P1区域,并且向下增长。

但是,也按照手册:

如何设置其他程序的任何可见窗口在顶部?

我怎样才能configuration窗口从应用程序生成核心转储?

数据绑定后如何添加项目?

如何将C ++变体转换为JSON?

如何在makefile中包含* .so文件

这个调用在4.3BSD或4.4BSD或glibc或Linux或任何其他已知的类Unix系统中不被支持。 有些系统有这个名字的例程返回ENOSYS。

通过查看glibc的sstk.c源文件可以注意到这一点

我的问题是,为什么要手动更改堆栈的大小? sbrk()和朋友是有道理的,但是有没有用手动在程序中手动调整堆栈大小

C#中的PHP Web服务:Invoke()函数返回null

使用xbuild编译visual c ++项目时定义一个目标

在Win32中任何易于使用的散列函数来散列ASCIIstring?

在C / Linux中显示图像最简单的方法是什么?

Windows线程hibernate并从另一个线程中唤醒

使用系统调用显式增长堆栈的另一个可能的原因是,如果请求太大,与正常的处理堆栈分配失败方法相反,你可以得到一个干净的错误指示(即,甚至不尝试,如果有任何分配失败,只是让进程崩溃)。

这将是很难确切知道你需要多少堆栈空间来执行一些递归操作,但你可以做一个合理的猜测和sstk(guess*10)只是为了确保。

正如我在评论中首先表达的那样,这个电话是不被支持的事实,这表明实际上没有太多的意义,至少不会有任何意义。

linux.die.net上的文档将这个函数的特性归功于BSD(尽管它在现代BSD中显然不受其他任何地方的支持),而BSD追溯到真正的 AT&T Unix。 在RAM很珍贵的时候,这可能更有意义。 在那些日子里,你也可能无法依靠自动增加的堆栈大小。 因此,您可以在深度递归算法中动态扩展堆栈,然后将其缩回。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐