Интересное/странное использование malloc — какой смысл?
Для представления строки из N 8-битных символов нужно (N * 8 / 6) = (N / 3 * 4) 6-битных символов (base 64).
(l + 2) / 3 это деление на 3 с округлением вверх, поскольку количество символов должно быть целым.
+ 1 — это для нуля в конце строки.
Ну да, по-моему всё очевидно. Вычисляется длина итоговой строки, которая относится к изначальной (а это l в этой формуле) как 4/3.