C语言寄存器变量和内存变量的操作速度对比
实验代码
#include <windows.h>
#include <stdio.h>
int test_reg(const unsigned long n)
{
const int t1 = GetTickCount();
for (register unsigned long i = 0; i < n; i++)
{
}
const int t2 = GetTickCount();
return t2 - t1;
}
int test_nonreg(const unsigned long n)
{
const int t1 = GetTickCount();
for (unsigned long i = 0; i < n; i++)
{
}
const int t2 = GetTickCount();
return t2 - t1;
}
int main()
{
unsigned long n_0 = 1 << 10;
for (unsigned long n = n_0; n < 1e9; n = n << 1)
{
printf("non-reg with n=%ld: %d\n", n, test_nonreg(n));
printf("reg with n=%ld: %d\n", n, test_reg(n));
}
return 0;
}
实验输出
non-reg with n=1024: 0
reg with n=1024: 0
non-reg with n=2048: 0
reg with n=2048: 0
non-reg with n=4096: 0
reg with n=4096: 0
non-reg with n=8192: 0
reg with n=8192: 0
non-reg with n=16384: 0
reg with n=16384: 0
non-reg with n=32768: 0
reg with n=32768: 0
non-reg with n=65536: 0
reg with n=65536: 0
non-reg with n=131072: 0
reg with n=131072: 0
non-reg with n=262144: 0
reg with n=262144: 0
non-reg with n=524288: 16
reg with n=524288: 0
non-reg with n=1048576: 0
reg with n=1048576: 0
non-reg with n=2097152: 0
reg with n=2097152: 0
non-reg with n=4194304: 16
reg with n=4194304: 0
non-reg with n=8388608: 15
reg with n=8388608: 0
non-reg with n=16777216: 47
reg with n=16777216: 0
non-reg with n=33554432: 63
reg with n=33554432: 16
non-reg with n=67108864: 125
reg with n=67108864: 47
non-reg with n=134217728: 250
reg with n=134217728: 94
non-reg with n=268435456: 531
reg with n=268435456: 172
non-reg with n=536870912: 1093
reg with n=536870912: 360
实验结论
寄存器变量操作约比内存变量操作快三倍