CSAPP:可变大小阵列与固定大小阵列

CSAPP:可变大小阵列与固定大小阵列,c,arrays,C,Arrays,我正在学习CMU 15-213,该课程讨论计算机组织和结构。目前我已经完成了讨论数组的部分。 以下示例显示了固定大小数组和可变大小数组之间的差异: 第一个示例是固定大小的数组,列号C=16,元素大小K=4,因此C*K=64,代码使用salq得到64*i;第二个例子是可变大小的数组,列号C是一个变量,所以我们直到编译时才知道它;因此,我们必须使用imulq而不是salq。在这种情况下,可变大小的数组更昂贵。然而,我认为这是由于Ck=64,如果我们将C设置为15或17,那么Ck=60或68,那么我

我正在学习CMU 15-213,该课程讨论计算机组织和结构。目前我已经完成了讨论数组的部分。 以下示例显示了固定大小数组和可变大小数组之间的差异:


第一个示例是固定大小的数组,列号C=16,元素大小K=4,因此C*K=64,代码使用salq得到64*i;第二个例子是可变大小的数组,列号C是一个变量,所以我们直到编译时才知道它;因此,我们必须使用imulq而不是salq。在这种情况下,可变大小的数组更昂贵。然而,我认为这是由于Ck=64,如果我们将C设置为15或17,那么Ck=60或68,那么我们可能不会只使用一个salq操作。一般来说,如果固定大小数组的C*k不等于2^n,那么设置数组的两种方法的计算成本相同?

为什么你不能自己做实验?传递大小的费用是多少?FTW,对于静态固定大小矩阵C=17,K=7 icc在
-O3
模式下生成代码,就像它是一个大小为136的连续数组一样,即它在内部交换C和K的含义,并将K取整为8,从而为
修复元素生成
shlq$3,%rax
。这正是你不应该担心的微优化。相反,要努力编写可读的程序。例如,对
固定矩阵的使用提出疑问。将指针隐藏在typedef后面是一种非常糟糕的做法,因为它会混淆读者,并使程序的可读性/可维护性大大降低。我会把精力花在这些问题上,而不是计算CPU指令周期。