free为什么知道申请的内存块大小?
简单来说,就是在malloc进行内存分配时会把内存大小分配地略大一点,多余的内存部分用于储存一些头部数据(这块内存块的信息),这块头部数据内就包括分配的内存的长度。
但是在返回指针的时候,malloc会将其往后移动,使得指针代表的是用户请求的内存块的起始地址。
头部数据占用的大小通常是固定的(网上查了一下有一种说法是16字节,也有说是sizeof(size_t)的),在将指针传入free后,free会将指针向前移动指定长度以获得头部数据,读取到分配的内存长度,然后连同头部数据和所分配长度的内存一并释放掉。
内存释放可以理解为这块内存被重新接到了空闲链表上,以备后面的分配。
(实际上内存释放后的情况其实挺复杂的,得要看具体的算法实现和运行环境)
引用自:https://www.cnblogs.com/somebottle/p/Pointers_and_2D_Arrays.html
浙公网安备 33010602011771号