Re: free(), the size to free?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2016-05-25 14:17 GMT-04:00 Greg KH <greg@xxxxxxxxx>:
> On Wed, May 25, 2016 at 02:00:41PM -0400, Wenda Ni wrote:
>> The prototype is void kfree(const void *).
>>
>> As the input pointer is void *, how does the kernel know the size of memory to
>> be freed? There should be some metadata recorded under the hood, right?
>
> Yes there is.  See the memory allocation code for the details.
>
> Same goes for the C language implementation of free(), look at any libc
> implementation for more details about that if you are curious, the
> basics are the same for within the kernel.

Take heap allocation in glibc for example,

1. An allocated chunk is represented as follows:

chunk -> | Size of previous chunk, if allocated |
              | Size of chunk, in bytes         |A|M|P|
mem ->   | User data starts here                     |
              |                                                     |

2. An chunk that was at one time allocated but has been free()d,

chunk -> | Size of previous chunk, if allocated  |
              | Size of chunk, in bytes          |A|  |P|
mem ->   | Forward pointer to next chunk in list |
              | Back pointer to next chunk in list     |
              | Unused space                                |

The pointer (argument in free or kfree) is a pointer to a complicated
data structure. The information you seek is all in that data
structure. All you need to do is to find documents that explains this
data structure.

My best regards to you.

     No System Is Safe!
     mudongliang
>
> thanks,
>
> greg k-h
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies@xxxxxxxxxxxxxxxxx
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux