Memory allocation algorithm