Учитывая следующие данные, каков наилучший способ организовать массив элементов так, чтобы был возможен самый быстрый произвольный доступ?
Каждый элемент имеет некоторый int, имя из 3 символов с '\ 0' в конце и значение с плавающей запятой .
Я вижу два возможных способа организации и доступа к такому массиву:
Первый:
typedef struct { int num; char name[4]; float val; } t_Element;
t_Element array[900000000];
//random access:
num = array[i].num;
name = array[i].name;
val = array[i].val;
//sequential access:
some_cycle:
num = array[i].num
i++;
Второе:
#define NUMS 0
#define NAMES 1
#define VALS 2
#define SIZE (VALS+1)
int array[SIZE][900000000];
//random access:
num = array[NUMS][i];
name = (char*) array[NAMES][i];
val = (float) array[VALS][i];
//sequential access:
p_array_nums = &array[NUMS][i];
some_cycle:
num = *p_array_nums;
p_array_nums++;
Мой вопрос: какой метод быстрее и почему? Моей первой мыслью было, что второй метод создает самый быстрый код и позволяет максимально быстро копировать блок, но я сомневаюсь, что он экономит какое-либо чувствительное количество инструкций процессора по сравнению с первым методом?