Как лучше разместить в оперативной памяти массив комплексных чисел с точки зрения производительности?
=======================================================================================================

 В двух массивах: double re[N]; double im[N]; или в одном double c[2*N], где действительные и мнимые части чередуются?  

Есть ли какая-нибудь разница с точки зрения производительности? Может, во втором случае лучше работает кэш процессора, т.к. действительная и мнимая части числа используются одновременно?  

Мне удобнее в двух массивах.  

P.S. Про структуры и читабельность я знаю.  

Кроме того, мне помнится, что в некоторых популярных математических библиотеках действительные и мнимые части хранятся отдельно. Например, UMFPACK поддерживает оба варианта. Логика мне тоже подсказывает, что лучше использовать один массив, но я не уверен, хотелось бы каких-нибудь подтверждений, результатов тестов... 

 Если вы хотите быть дружественными к кэшу, то нужна локальность доступа к данным.   

  

Поэтому лучше в одном массиве чередовать реальную и мнимую части. Или, еще лучше - завести структуру с двумя полями и хранить массив из них. Тут в памяти расстановка данных будет такая же, но код будет читаем и логичен. 

 Удобнее использовать массив структур:  

```
struct complex_t {
float re, im;
};
```
  

Смысл тот же, что и в c[2*N], но пользоваться удобнее и читабельность кода повышается.  

Учтите, что операции над double обычно выполняются дольше, чем над float. 

> Есть ли какая-нибудь разница с точки зрения производительности?

  

Это зависит от алгоритма обработки. Если вы просто загружаете 2n случайных чисел в память, то это займет одинаковое количество времени.