69,371
社区成员
发帖
与我相关
我的任务
分享
int x[100];
int dummy(int i)
{
return i/2;
}
int _tmain(int argc, _TCHAR* argv[])
{
clock_t start, finish;
int z;
char c;
srand(1);
for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
x[i*10+j]=rand();
// 第一种方式访问数组
srand(1);
start = clock();
for (int i=0; i<LOOPS; i++)
{
for(int j=0; j<10; j++)
for(int k=0; k<10; k++)
z=dummy(x[j*10+k]);
}
finish = clock();
cout << (finish-start) << endl;
// 第二种方式访问数组
srand(1);
start = clock();
for (int i=0; i<LOOPS; i++)
{
int *p=x;
for(int j=0; j<10; j++)
for(int k=0; k<10; k++)
{
z=dummy(*p);
p++;
}
}
finish = clock();
cout << (finish-start) << endl;
return 0;
}
#include<stdlib.h>
#include <iostream>
using namespace std;
int x[1000000;
int dummy(int i)
{
return i/2;
}
int main(int argc, char* argv[])
{
clock_t start, finish;
int z;
char c;
const int LOOPS = 1000;
srand(1);
for(int i=0; i<LOOPS; i++)
for(int j=0; j<LOOPS; j++)
x[i*LOOPS+j]=rand();
z = 0;
start = clock();
for (int i=0; i<LOOPS; i++)
{
for(int j=0; j<LOOPS; j++)
for(int k=0; k<LOOPS; k++)
z += dummy(x[j*LOOPS+k]);
}
finish = clock();
cout << "Z = " << z << endl;
cout << (finish-start) << endl;
z = 0;
start = clock();
for (int i=0; i<LOOPS; i++)
{
int *p=x;
for(int j=0; j<LOOPS; j++)
for(int k=0; k<LOOPS; k++)
{
z += dummy(*p);
p++;
}
}
finish = clock();
cout << "Z = " << z << endl;
cout << (finish-start) << endl;
return 0;
}
#include <stdio.h>
#define N 10000
int data[N];
void fun1()
{
int i;
int temp;
for (i = 0; i < N; i++)
{
temp = data[i] * 2;
}
}
void fun2()
{
int *p = data;
int i = 0;
int temp;
while(i < N)
{
temp = *p * 2;
p++;
}
}
void main()
{
fun1();
fun2();
}
TITLE bmp.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
_DATA SEGMENT
COMM _data:DWORD:02710H
_DATA ENDS
PUBLIC _fun1
_TEXT SEGMENT
_i$ = -8
_temp$ = -4
;----------------------------------------------fun1 start
_fun1 PROC NEAR
; File bmp.c
; Line 7
push ebp
mov ebp, esp
sub esp, 8
; Line 11
mov DWORD PTR _i$[ebp], 0
jmp SHORT $L339
$L340:
mov eax, DWORD PTR _i$[ebp]
add eax, 1
mov DWORD PTR _i$[ebp], eax
$L339:
cmp DWORD PTR _i$[ebp], 10000 ; 00002710H
jge SHORT $L341
; Line 13
mov ecx, DWORD PTR _i$[ebp]
mov edx, DWORD PTR _data[ecx*4]
shl edx, 1
mov DWORD PTR _temp$[ebp], edx
; Line 14
jmp SHORT $L340
$L341:
; Line 15
mov esp, ebp
pop ebp
ret 0
_fun1 ENDP
;----------------------------------------------fun1 end
_TEXT ENDS
;----------------------------------------------fun2 start
PUBLIC _fun2
_TEXT SEGMENT
_p$ = -4
_i$ = -12
_temp$ = -8
_fun2 PROC NEAR
; Line 17
push ebp
mov ebp, esp
sub esp, 12 ; 0000000cH
; Line 18
mov DWORD PTR _p$[ebp], OFFSET FLAT:_data
; Line 19
mov DWORD PTR _i$[ebp], 0
$L348:
; Line 22
cmp DWORD PTR _i$[ebp], 10000 ; 00002710H
jge SHORT $L349
; Line 24
mov eax, DWORD PTR _p$[ebp]
mov ecx, DWORD PTR [eax]
shl ecx, 1
mov DWORD PTR _temp$[ebp], ecx
; Line 25
mov edx, DWORD PTR _p$[ebp]
add edx, 4
mov DWORD PTR _p$[ebp], edx
; Line 26
jmp SHORT $L348
$L349:
; Line 27
mov esp, ebp
pop ebp
ret 0
_fun2 ENDP
;----------------------------------------------fun2 end
_TEXT ENDS
PUBLIC _main
_TEXT SEGMENT
_main PROC NEAR
; Line 30
push ebp
mov ebp, esp
; Line 31
call _fun1
; Line 32
call _fun2
; Line 33
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
for(int j=0; j<100; j++){
z=dummy(*p);
p++;
}
for(int j=0; j<99; j++){
z=dummy(*p);
p++;
}