Если вы можете охарактеризовать максимальный объем памяти, необходимый для набора этих массивов, который будет использоваться для любого конкретного «фрейма» (что бы это ни было), и если вы будете иметь дело только с одним кадром за раз (другими словами, вы будете выполнять работу над одним набором массивов, а затем сбрасывать все эти массивы, прежде чем выполнять другой раунд работы над другим набором массивов), тогда вы, скорее всего, получите максимальную производительность, выделив свои массивы из блок статической памяти, размер которого соответствует вашему максимальному набору рабочих заданий.
Тогда ваше распределение массива может быть простым распределителем пулов, который вырезает память для массива с передней части блока и корректирует указатель блока только после того, как выделение будет готово для следующего распределения массива. Когда вы закончите работу над этим набором массивов, все можно освободить, «очистив пул» - просто сбросив указатель блока на начало пула статической памяти.
Конечно, поскольку вы не дали подробностей о том, как ваша работа должна быть выполнена, этот метод может вообще не подходить (возможно, поэтому вы еще не нашли окончательного ответа - такой ответ зависит от конкретных характеристик выполняемой вами работы).