保持Stackoverflow的新标志devise的庆祝活动,我很好奇sstk()在BSD和其他类UNIX操作系统中应该是什么意思?
根据Linux内核系统调用接口manpages, sstk(2)应该是:
… [更改]堆栈区域的大小。 堆栈区域也根据需要自动扩展。 在VAX上,文本和数据区域在P0区域相邻,而堆栈区域在P1区域,并且向下增长。
但是,也按照手册:
如何设置其他程序的任何可见窗口在顶部?
我怎样才能configuration窗口从应用程序生成核心转储?
数据绑定后如何添加项目?
如何将C ++变体转换为JSON?
这个调用在4.3BSD或4.4BSD或glibc或Linux或任何其他已知的类Unix系统中不被支持。 有些系统有这个名字的例程返回ENOSYS。
我的问题是,为什么要手动更改堆栈的大小? sbrk()和朋友是有道理的,但是有没有用手动在程序中手动调整堆栈大小 ?
C#中的PHP Web服务:Invoke()函数返回null
使用xbuild编译visual c ++项目时定义一个目标
在Win32中任何易于使用的散列函数来散列ASCIIstring?
Windows线程hibernate并从另一个线程中唤醒
使用系统调用显式增长堆栈的另一个可能的原因是,如果请求太大,与正常的处理堆栈分配失败方法相反,你可以得到一个干净的错误指示(即,甚至不尝试,如果有任何分配失败,只是让进程崩溃)。
这将是很难确切知道你需要多少堆栈空间来执行一些递归操作,但你可以做一个合理的猜测和sstk(guess*10)只是为了确保。
正如我在评论中首先表达的那样,这个电话是不被支持的事实,这表明实际上没有太多的意义,至少不会有任何意义。
linux.die.net上的文档将这个函数的特性归功于BSD(尽管它在现代BSD中显然不受其他任何地方的支持),而BSD追溯到真正的 AT&T Unix。 在RAM很珍贵的时候,这可能更有意义。 在那些日子里,你也可能无法依靠自动增加的堆栈大小。 因此,您可以在深度递归算法中动态扩展堆栈,然后将其缩回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。