assumes that memory is of size for some integer both free and reserved blocks will always be of size for < at any given timethere might be both free and reserved blocks of various sizes the buddy system keeps separate list for free blocks of each size there can be at most such listsbecause there can only be distinct block sizes when request comes in for wordswe first determine the smallest value of such that > block of size is selected from the free list for that block size if one exists the buddy system does not worry about internal fragmentationthe entire block of size is allocated if no block of size existsthe next larger block is located this block is split in half (repeatedly if necessaryuntil the desired block of size is created any other blocks generated as by-product of this splitting process are placed on the appropriate freelists the disadvantage of the buddy system is that it allows internal fragmentation for examplea request for words will require block of size the primary advantages of the buddy system are ( there is less external fragmentation( search for block of the right size is cheaper thansaybest fit because we need only find the first available block on the block list for blocks of size and ( merging adjacent free blocks is easy the reason why this method is called the buddy system is because of the way that merging takes place the buddy for any block of size is another block of the same sizeand with the same address ( the byte position in memoryread as binary valueexcept that the kth bit is reversed for examplethe block of size with beginning address in figure (ahas buddy with address likewisein figure ( )the block of size with address has buddy if free blocks are sorted by address valuethe buddy can be found by searching the correct block size list merging simply requires that the address for the combined buddies be moved to the freelist for the next larger block size other memory allocation methods in addition to sequential-fit and buddy methodsthere are many ad hoc approaches to memory management if the application is sufficiently complexit might be desirable to break available memory into several memory zoneseach with different memory management scheme for examplesome zones might have simple memory access pattern of first-infirst-out this zone can therefore be managed efficiently by using simple stack another zone might allocate only records of fixed sizeand so can be managed with simple freelist as described in section other zones might need one of the general-purpose memory allocation methods