При преобразовании динамического выделения памяти (во время выполнения) в статические (время компиляции) необходимо учитывать две проблемы. Во-первых, компилятор, очевидно, должен знать, сколько памяти выделить во время компиляции. В приведенном выше примере это выглядит так, как будто бы все, что указывает decoder-> sync, имеет постоянный размер, поэтому это не должно быть проблемой. Однако если бы вы выделяли память для байтового массива для последовательности данных переменной длины, у вас возникла бы проблема. Вам придется либо выделить достаточно для максимально возможной длины данных, либо разбить данные на куски, или ... надеюсь, вы поняли идею.
Другая проблема - куча против стека. Все динамические выделения памяти происходят из кучи. Неглобальные статические выделения памяти происходят из стека, и стеки могут быть довольно маленькими во встроенных средах. Это означает, что если выделение памяти является средним-большим, вам, вероятно, потребуется сделать его глобальным или «статическим» (статические переменные локальной области видимости также выходят из кучи), чтобы избежать переполнения стека, даже если переменная не будет иначе должен быть глобальным.
Надеюсь, это имеет смысл.