一些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
運行這兩個程序時,第二個程序需要更多時間。這意味着使用指針需要比數組索引方法更多的時間。 能否請您向我解釋這是如何工作的,這些簡單的程序?
這不是他們指針訪問的含義。關於時間安排,有幾個項目你沒有提及你佔的比例(debug vs release,反編譯的asm分析)。如果基準測試像「時間」流程監控一樣簡單,那麼我們都是過多的統計人員。 – WhozCraig 2014-10-08 07:41:07
我認爲你的意思是這樣的:http://stackoverflow.com/q/26241007/2455888 – haccks 2014-10-08 07:45:10
用'gcc'.'objdump -D a.out> file'編譯時添加'-g''標誌,節目。請記住爲每個程序創建兩個不同的文件。現在做vimdiff file1 file2。比較差異,但我認爲不會有任何區別。 – 2014-10-08 07:46:35