記憶體移動:memmove原理模擬實現
阿新 • • 發佈:2019-01-10
【移動記憶體】 閱讀下列程式說明和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: