【发布时间】:2011-03-16 09:20:45
【问题描述】:
鉴于以下数据,组织元素数组的最佳方法是什么,以便可能实现最快的随机访问?
每个元素都有一个 int 数字、一个以 '\0' 结尾的 3 个字符的名称和一个浮点值。
我看到了两种可能的方法来组织和访问这样的数组:
第一:
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++;
我的问题是,什么方法更快,为什么?我的第一个想法是第二种方法可以生成最快的代码并允许最快的块复制,但我怀疑它是否与第一种方法相比节省了任何敏感的 CPU 指令数量?
【问题讨论】:
-
你对
SIZE的定义在我看来是假的。什么意思? -
@Jens:我的错字,应该是 VALS
标签: c arrays pointers data-structures struct