Когда вызывается функция семейства exec, то параметры копируются в память нового процесса, который замещает текущий без возможности возврата.
Соответственно, если параметры выделены на куче - формально происходит утечка памяти (still reachable в формулировке valgrind). Да, система заберет память назад по завершению процесса (флаг on close). Но ведь формально это неправильно.
Речь про случай, когда мы делаем fork перед exec.
Если выделять на стеке - то тогда есть жесткое ограничение на размер аргументов (плюс стек не резиновый, команда формально может быть до 3.5 Гб длиной, а стек всего метр-4).
Или может можно как-то по другому выделить?