Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6271067
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类:

2012-05-20 12:28:49

linux是怎么做的,很简单,十分懒惰,linux没有为堆栈分配静态的大小,而是利用缺页中断使得堆栈在运行期动态增长,当然没有了固定的大小也就不存在溢出的问题了,只要虚拟内存足够,动态增长的需求就有可能被满足,那么linux有没有什么办法来保护非堆栈数据被堆栈数据损坏或者反过来的情况呢?说实话,没有,主要是因为一来实现那个机制很复杂,维护引入的额外数据结构肯定会影响效率,二来这是用户空间的事情,程序员如果不合格直接开掉他就是了,内核不用为他擦屁股,实际上内核如果真的用雕虫小技帮他擦了屁股,没有会说内核很高明的,因此开源的linux没有这种复杂而且单单对内核没有什么用的机制,实际上如果程序员不合格,那么他写的程序是防不胜防的,机器能和人PK吗?很显然不能,再好的操作系统面对一般烂的程序员也是无力去爱谁啊! 
最后讨论一下“如何分配内存以及在哪里分配到底要不要让用户看到”这个有点哲学味道的问题,这个问题关键要看分配的内存做什么用以及这种作用和系统机制的联系的紧密程度,比如说我需要一块内存保存一些我程序里面的结构,比如大型数据库缓冲,比如一个字符串,这种情况下分配越透明越好,因为程序没有必要和实现机制交流,这样程序可以更加集中精力解决所谓的业务问题,但是如果一块内存被一个管理机制需要,那么就有必要导出给用户更多的信息,因为这种需求往往都是关注实现本身的需求,而不是接口需求,比如线程栈的位置,因为线程是操作系统的一种机制,目的是优化程序执行,它其实和业务逻辑没有什么太大的关系,线程更多的被程序流程的管理机制使用而不是被业务流程使用。在这一点点上,linux要比windows好得多,看看clone系统调用的参数,用户必须为线程分配栈空间,而这在windows中却是被默默执行的,实际上windows尽力去向用户隐藏底层的很多重要的信息,然而类似线程栈的位置这样的信息很多用户空间的管理机制还是要用到的,因此最好将这一切都交给用户,系统不要管的太多。
推荐个博客——
挨踢技术专区- http://blog.chinaunix.net/uid/26972200.html

阅读(683) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~