일부 C 책 저자는 포인터를 통해 배열 값에 액세스하는 것이 배열 색인을 통해 수행하는 것보다 빠르다고 말합니다. 그러나 이것이 사실입니까? 다음은이 개념을 이해하기 위해 작성한 두 가지 프로그램입니다.은 배열 색인보다 빠른 포인터 액세스 방법입니까?
main()
{
int arr[100000],*ptr,c,i;
ptr=arr;
for(i=0;i<100000;i++)
arr[i]=i;
for(i=0;i<100000;i++)
c = arr[i];
}
main()
{
int arr[100000],*ptr,c,i;
ptr=arr;
for(i=0;i<100000;i++)
*(ptr+i)=i;
for(i=0;i<100000;i++)
c = *(ptr+i);
}
time ./a.out
두 개 프로그램을 실행할 때 두 번째 프로그램에 더 많은 시간이 걸립니다. 즉, 포인터 사용은 배열 인덱스 방법보다 시간이 오래 걸립니다. 간단한 프로그램으로 어떻게 작동하는지 설명해 주시겠습니까?
이는 포인터 액세스가 의미하는 바가 아닙니다. 그리고 타이밍에 관해서는, 당신이 귀찮게하지 않은 몇 가지 항목이 있습니다 (디버그 대 릴리스, 디 컴파일 된 asm 분석). 벤치마킹이'time' 프로세스 모니터만큼이나 단순하다면 우리는 모두 과대 선출 된 통계 학자가 될 것입니다. – WhozCraig
당신이 이것을 의미한다고 생각합니다 : http://stackoverflow.com/q/26241007/2455888 – haccks
'gcc'로 컴파일 할 때'-g' 플래그를 추가하십시오 .'objdump -D a.out> file', 둘다에 대해 프로그램. 각 프로그램에 대해 두 개의 다른 파일을 작성하십시오. 이제 vimdiff file1 file2를 수행하십시오. 차이점을 비교해보십시오. 그러나 차이는 없습니다. –