簡體   English   中英

這是逆序記憶的正確方法嗎?

[英]Is this the correct way for memmove in reverse order?

我正在嘗試了解記憶的工作原理。 我以其中以這種方式在內存中存儲數據的示例為例。

Start at 0
First Memory Block(A) of size 10
Hence A->(0,10) where 0 being where it starts and 10 it's length.
Thus B-> (10,20)
     C-> (30,50)
     D-> (80,10)

假設我們有一個變量X,它記錄下一個可以在何處插入的變量,在上面的示例中該變量應為90。 現在,如果我要刪除B,那么我想將C和D移至B占用的可用空間。input是輸入數組。 因此,輸入數組看起來像具有屬於塊A的前10個字符,接下來具有屬於塊B的20個字符,依此類推。我認為可以使用memmove如下進行操作:

memmove(input+start(B),input+start(B)+length(B),X-(start(B)+length(B))

現在,我想嘗試反向順序。

So we start from behind
Start at 100
First memory block(A) of size 10
A-> (100,10) 100 is where it starts and 10 it's length
B-> (90,20)
C-> (70,50)
D-> (20,10) 

與第一個示例類似,假設我們有一個變量X,在其中記錄下一個可以插入的位置。 該示例的反向順序為10。

現在,如果我要刪除塊B,那么我希望C和D在B的空間中重疊。 這將是相反的順序。 我認為這可以通過以下方式完成:

memmove(input+start(B)-(start(B)-length(B)-X),input+X,start(B)-length(B)-X)

根據Alex的評論,我認為我沒有保持正確的數據順序。 數據就像

A->(90,10)
B->(70,20)
C->(40,30)
D->(20,20)
and X which would be D's starting address i.e at 20
Now if we want to delete B,memmove would look something like this.

memmove(input+X+length(B), input+X,start(B)-X)

有更好的方法可以做到這一點嗎?

請注意,這不是用於家庭作業。

CD在一起占據50 + 10 = 60,那么為什么20在memmove(input+start(B), input+start(B)+length(B), 20)

至於其他部分,在C對象中,它們不是從其最后一個字節開始(第一個字節位於最低地址,而最后一個字節位於最高地址)。 這部分令人困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM