关于“为什么delete以后指针还能被赋值”一种描述
2017-05-09 14:37
246 查看
首先,系统知道哪一部分堆的线性空间被占掉了,new就是起这个作用,仅仅是声明一下(可能多了一个功能),因为堆的空间不一定是直接从系统调用获得的,堆的空间是这样管理的:程序先伸请一个大的堆空间,这个时候是通过系统调用获得空间,以后的每一次new都是从这个已获得的空间里面再进行零售分配,与系统调用无关,只有当这个大的堆空间不足时,才会再次调用系统调用申请更多空间(new触发).所以,即使一个指针被delete掉,指针的值如果不变,他所指向的空间仍然在那一个大块空间里,仍然是属于进程的线性地址空间,估计,这个空间的权限是可读可写可执行的,所以,delete掉以后,仍然可以对它赋值,读。
程序装载到线性地址空间是按分页进行的,好进行虚拟地址与物理地址的映射,而每个页都有一个权限,比如:代码段就是只读的,而堆对应的页的权限,是可读可写可执行。
转载:http://blog.chinaunix.net/uid-22174570-id-1786893.html
程序装载到线性地址空间是按分页进行的,好进行虚拟地址与物理地址的映射,而每个页都有一个权限,比如:代码段就是只读的,而堆对应的页的权限,是可读可写可执行。
转载:http://blog.chinaunix.net/uid-22174570-id-1786893.html
相关文章推荐
- delete指针以后应赋值为NULL——QT deletelater指针以后也同样要马上赋值为NULL
- delete指针以后应赋值为NULL
- delete指针以后应赋值为NULL
- C语言中,为什么字符串可以赋值给字符指针变量
- 关于指针的一种用法
- [笔试题 2][c/c++]关于指针直接赋值问题
- [笔试题 2][c/c++]关于指针直接赋值问题
- 关于函数里对指针赋值的问题
- Java关于数组对象赋值与指针
- 程序员修炼之路(九)关于为什么中国这么多码农的其中一种解释
- 关于指针的一种用法
- 二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针
- 关于Gtkmm窗口指针的delete 以及窗口的hide()方法和destroy_()方法
- 指针二维二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针
- 小小的C语言问题指针数组赋值----关于指针和数组。
- 关于原型链和继承问题的思考:为什么不能直接把父类的prototype赋值给子类的prototype
- 关于关系运算的一种简短描述
- 关于为什么要为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
- C++ primer中关于new和delete工作的描述
- 关于给指针赋值的问题