Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103409
  • 博文数量: 19
  • 博客积分: 1550
  • 博客等级: 上尉
  • 技术积分: 246
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-15 19:50
文章分类

全部博文(19)

文章存档

2013年(1)

2012年(4)

2010年(8)

2009年(6)

我的朋友

分类: LINUX

2009-10-04 17:01:19

    首先,系统知道哪一部分堆的线性空间被占掉了,new就是起这个作用,仅仅是声明一下(可能多了一个功能),因为堆的空间不一定是直接从系统调用获得的,堆的空间是这样管理的:程序先伸请一个大的堆空间,这个时候是通过系统调用获得空间,以后的每一次new都是从这个已获得的空间里面再进行零售分配,与系统调用无关,只有当这个大的堆空间不足时,才会再次调用系统调用申请更多空间(new触发).所以,即使一个指针被delete掉,指针的值如果不变,他所指向的空间仍然在那一个大块空间里,仍然是属于进程的线性地址空间,估计,这个空间的权限是可读可写可执行的,所以,delete掉以后,仍然可以对它赋值,读。
    程序装载到线性地址空间是按分页进行的,好进行虚拟地址与物理地址的映射,而每个页都有一个权限,比如:代码段就是只读的,而堆对应的页的权限,是可读可写可执行。
阅读(1938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~