Это вопрос размера стека в сравнении с копией объекта.
В частности, для C передайте значение или ссылку на другие функции. Это не только поддерживает логику, но и является верным путем почти во всех случаях.
Если вы вызываете другую функцию в операторе return
, исходный стек не уничтожается и создается новый стек для новой функции. При этом во время перехода функции объект будет скопирован или перемещен в новый стек для манипуляции. Зависит от компилятора, хотя он не гарантированно будет «перемещен», поэтому сделайте это так же, как передавая объект по значению в функцию плюс возможность переполнения стека.
Лучшая практика, если вы действительно много раз беспокоитесь о копировании большого объекта, - объявлять объект как глобальный статический в пределах своей жизненной области. При вызове функций передавайте ссылку на объект. Хотя есть одна загвоздка. Вы должны быть особенно осторожны при обращении к памяти, поскольку данные могут быть непреднамеренно изменены.