免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2212 | 回复: 16
打印 上一主题 下一主题

《The Desing and Implementation of the FreeBSD OS》的这句话怎么理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-29 18:03 |只看该作者 |倒序浏览
在”3.5 内存管理服务“这一节,讲程序启动时初始化的部分...
       。。。
       堆栈也构建在被初始化为零的内存领域上。虽然堆栈并不需要被初始化为零,但这种早期UNIX的习惯仍被保存了下来。4.2BSD为了缩短起动时间并没有将堆栈清零而是保留了老内容。但是,考虑到这样可能恶用老程序的堆栈溢出,或可能由老程序带来的不可预见的bug,4.3BSD中再次将堆栈用零初始化。
      。。。


这段描述和这本书的4.4BSD版本中一样的,当时看老版本的时候以为是描述过时了,没在意,但是这个新版本里面还是这么说的...


  1. #include <stdio.h>

  2. int f()
  3. {
  4.         int a;
  5.         printf("f():a= [%d]\n",a);
  6.         return 0;
  7. }

  8. int main()
  9. {
  10.         int a;
  11.         printf("main():a= [%d]\n",a);
  12.         f();
  13.         return 0;
  14. }
复制代码


这段代码在FreeBSD和Linux上两个a都不会等于0,原来觉得理所当然,现在搞不懂了...

论坛徽章:
0
2 [报告]
发表于 2005-11-29 18:19 |只看该作者
问题解决了...在FreeBSD1.0.2上运行了一次,确实被初始化为0了...看来还是描述老了

论坛徽章:
0
3 [报告]
发表于 2005-11-29 22:17 |只看该作者
LZ的程序测试的是stack上的变量, 文档中说的堆栈是heap还是stack? 还是两个?

论坛徽章:
0
4 [报告]
发表于 2005-11-29 22:31 |只看该作者
是说的stack,不涉及heap,这段说法已经老了,看了也要忘掉...

论坛徽章:
0
5 [报告]
发表于 2005-11-29 22:36 |只看该作者
stack上, 是有点奇怪. FreeBSD1.0.2是用VMM吗?

论坛徽章:
0
6 [报告]
发表于 2005-11-29 22:42 |只看该作者
是的,在VMware上装的。

论坛徽章:
0
7 [报告]
发表于 2005-11-29 22:47 |只看该作者
>>是的,在VMware上装的。

晕,他问的不是这个。

论坛徽章:
0
8 [报告]
发表于 2005-11-29 22:53 |只看该作者
是这样. 有空再看看BSD吧. 公司不用它, 所以没概念.
谢谢.

论坛徽章:
0
9 [报告]
发表于 2005-11-29 22:53 |只看该作者
是说Visual Memory  Management?V32就开始有么吧?
误解为typo了...

论坛徽章:
0
10 [报告]
发表于 2005-11-29 22:58 |只看该作者


我是想问 FreeBSD1.0.2 是否用 Virtual Memory Management.

如果是, stack清零就有点怪.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP