使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近下面哪个?

A、0.001秒 B、1秒 C、100秒 D、2小时
已邀请:

大茶园丁

赞同来自: codingfish 李珊

答案是B,1秒这个数量级。
至于为什么?
首先,典型的当代PC的CPU的主频的数量级是Ghz。
那么就是相当于一秒钟可以执行G这个数量级的指令周期。
而给每一个内存字节设置一个值'A',那
么这个单个字节设置值一个指令周期就可以完成,
'A'存寄存器,每设置一个一个内存字节只需要把寄存器的值传到内存单元中就完事。
所以,完成1GB字节的设置的时间数量级就是1秒。
 
那么怎样写代码去验证这个呢。请看下面实验代码。
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
struct timeval start, end;

long mtime, seconds, useconds;

gettimeofday(&start, NULL);
char p = malloc(10241024*1024);
memset(p,'A', 102410241024);
gettimeofday(&end, NULL);

seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;

mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;

printf("Elapsed time: %ld milliseconds\n", mtime);

return 0;
}
这个代码在我的RMBP的2.6Ghz的i5处理器上的时间是440ms左右。所以这个测试结果也是符合1秒这个数量级的。

要回复问题请先登录注册