我有一個關於優化的練習。我需要優化一個旋轉和成像45度的程序。我知道訪問陣列使用指針效率更高,所以我試圖的變化如下─原來的代碼:優化/使用指針訪問數組
RGB* nrgb = (RGB *)malloc(imgSizeXY*3);//3=sizeof(RGB)
//...
for (i=imgSizeY-1; i>=0; --i)
{
for (j=imgSizeX-1; j>=0; --j)
{
//...
int y=(i*imgSizeX+j);
nrgb[y].r = *imgInd; //*imgInd computed earlier
的變化:
RGB* nrgb = (RGB *)malloc(imgSizeXY*3);//3=sizeof(RGB)
RGB* rgbInd = nrgb+imgSizeXY-1;
for (i=imgSizeY-1; i>=0; --i)
{
for (j=imgSizeX-1; j>=0; --j)
{
rgbInd->r=*imgInd;
--rgbInd;
但使用指針時,該程序產生錯誤的輸出。我一直盯着它幾個小時,仍然不知道爲什麼。有任何想法嗎?非常感謝你!
您在哪裏可以參考「指針語法比數組語法快」 –
45度環繞哪個點?中心或圖像的某個角落? –
@izomorphius中心。所以程序最初移動了座標,乘以旋轉矩陣然後向後移動。我已經將它改進爲包含循環外的最大計算和最小計算,但這仍然是一般想法。如果您有更快速的方法提示,我會很高興聽到他們的聲音。 – nodwj