Не все аргументы «функции» обязательно передаются по ссылке, но ваш пример - строка, которая передается по ссылке из-за того, что ее переменный размер не подходит для стека.
Особенности того, как вы вызываетеФункция и очистка перед возвратом будут варьироваться в зависимости от соглашения о вызовах, с которым вы должны взаимодействовать.
Если ваши вызывающие всегда будут кодом сборки под вашим контролем, вы можете передать короткие аргументы в стеке, но передача указателей позволяет вам использовать структуры данных, которые больше и сложнее, и, таким образом, более вероятные кандидаты на необходимостьоптимизация ручной сборки.