Я бы определенно пошел с C ++. Если вы внимательно относитесь к своему дизайну и избегаете создания тяжелых объектов внутри горячих точек, вы не должны видеть никаких различий в производительности, но код будет намного проще для понимания, обслуживания и расширения.
Используйте шаблоны и классы разумно. избежать ненужного создания объекта, передавая объекты по ссылке. Избегайте чрезмерного выделения памяти, при необходимости выделяйте память заранее горячих точек. Используйте ключевое слово restrict для указателей памяти, чтобы сообщать компилятору, когда указатели перекрываются или нет.
Что касается оптимизации, обратите особое внимание на выравнивание памяти. Предполагая, что вы работаете на процессоре Intel, вы можете использовать векторные инструкции, если вы через прагму расскажете компилятору о выравнивании памяти и псевдонимах-указателях. Вы также можете использовать векторные инструкции напрямую через встроенные функции.
вы также можете автоматически создавать код горячей точки с помощью шаблонов и позволить компилятору оптимизировать его, если у вас есть такие вещи, как короткие циклы разных размеров. Intel vtune или oprofile чрезвычайно полезны для определения производительности и устранения узких мест.
надеюсь, что поможет