1. 程式人生 > >記憶體移動:memmove原理模擬實現

記憶體移動:memmove原理模擬實現


【移動記憶體】 閱讀下列程式說明和C程式碼,在下劃線“__”處填入語句。

【程式說明】子程式Move是將地址為A開始的N個儲存單元 移動到地址為B開始的N個儲存單元中,對於兩個區域重疊的情況也能正確處理。

【溫馨提示】分為三種情況考慮,一種相等不處理,一種是順序操作肯定不會重疊,最後一種…;後面兩種需要呼叫Save函式,該函式已經編寫完成。


#define MAX  100  /* 總共在100個數據中處理 */       
#define N    10   /* 兩個儲存單元長度為10個單位 */  

int *A, *B;                                         

void
Save(int *a, int *b, int Step) { for (int i = 0; i < N; i++) { *b = *a; a += Step; b += Step; } } void
Move() { int *a, *b, Step; a = A; b = B; if (a == b) { return
; } else if (_____) { __________; __________; __________; } else { __________; } Save(a, b, Step); } int main(void) { int i, Array[MAX]; random(); /* 初始化隨機數因子,random(int X)返回不小於0, 不大於X的隨機整數 */ A = &Array[random(MAX - N)]; B = &Array[random(MAX - N)]; for (i = 0; i < N; i++) A[i] = i; Move(); return 0; }

【圖解分析】

//TODO:
1、Save函式功能分析

2、三種情況分析

【分析結果】

if (a == b)
{
    return;
}                  
else if ((a - b < 0) && (a - b > -N)) 
{                                     
    a += N-1;                           
    b += N-1;                           
    Step = -1;                          
}                                     
else                                  
{                                     
    Step = 1;                           
}                                     

【總結】

    //TODO: