gpt4 book ai didi

c++ - C程序执行速度

转载 作者:可可西里 更新时间:2023-11-01 16:52:20 26 4
gpt4 key购买 nike

我在编程语言校长科目考试中遇到一道题。想了很久还是没明白问题

问题:下面是一个程序C,在配置为~CPU Intel 1.8GHz,Ram 512MB的PC上在MSVC++ 6.0环境下执行

#define M 10000
#define N 5000
int a[M][N];

void main() {
int i, j;
time_t start, stop;

// Part A
start = time(0);
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
a[i][j] = 0;
stop = time(0);
printf("%d\n", stop - start);

// Part B
start = time(0);
for (j = 0; j < N; j++)
for (i = 0; i < M; i++)
a[i][j] = 0;
stop = time(0);
printf("%d\n", stop - start);
}

解释为什么 A 部分只在 1s 内执行,而 B 部分却用了 8s 完成?

最佳答案

这与数组内存的布局方式以及它如何加载到缓存中和访问方式有关:在版本 A 中,当访问数组的一个单元格时,邻居将其加载到缓存中,而然后代码立即访问这些邻居。在版本 B 中,访问了一个单元格(并将其邻居加载到缓存中),但下一次访问距离很远,在下一行,因此加载了整个缓存行但只使用了一个值,并且另一个缓存行必须每次访问都要填写。因此存在速度差异。

关于c++ - C程序执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1119443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com