C/C++中在对一个指针指向的内存调用free函数后,指针的值不变。那么这个指针指向的内存的值变不变呢?系统如何标记这段内存已经不再使用可以重新分配了呢?malloc free new delete操作在操作系统级别上发生了什么呢?
free了之后内存会被释放成初始状态,只时候指针还指向这个不可用的空间,成为“野指针”,为了防止这个指针被再次使用,要将其置空,指向null。
new的底层使用malloc实现。先使用malloc开辟出所需内存后,会调用对象构造函数初始化这片内存,相同的道理delete的底层是free+调用对象析构函数实现的,先销毁对象后再释放空间,所以malloc必须和free搭配使用,delete必须和new搭配,如果没有搭配会造成不可预知的错误。
在使用free()以后,指针的值没有变,但是指针所指向的地址的内容已经被标记为不可以使用,留作重新分配使用。
使用malloc的时候,实际系统只是记录了你申请的空间大小,但没有真的分配足够的空间,当你真的使用这段申请的指针地址时,操作系统会产生一个错误,标示现在有需要申请一段可用的内存了
new实际是在malloc的基础上申请了空间,并且初始化了这段空间,因此系统将这段内存已经实际创建完成了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。