C语言和C++中,为什么malloc函数需要 传入申请的内存大小,而free时候却不需 要传大小呢?
因为在每次malloc时,会多申请一块内存,这块内存会存放malloc申请内存的长度,看上图,malloc返回的地址是用户请求的内存,等到free时,free会先去当前指针指向地址的前16字节获取长度后再释放内存。
我在这篇文章里有过详细介绍:
16字节
关于malloc返回值的问题?
■,当■还有其
用户博承给内存
malloc返国的地址
而new[和delete[]其实原理类似,new[]会创建一个数组,一个对象数组需要一定的空间大小,假设一个对象需要N字节大小,K个对象的数组就需要KN个空间来构造对象数组,但是这里如果delete[]时候如何知道数组的长度呢,所以new[]会在KN个空间的基础上头部多申请4个字节用于存储数组长度,这样delete[]时候才知道对象数组的大小,才会相应调用K次析构函数,并且释放KN+4大小的内存。
这里留个思考题,如果new[和delete[不配对使用会出现什么问题?

请登录后发表评论
注册
停留在世界边缘,与之惜别