C 这是memmove按相反顺序的正确方法吗?
我想了解memmove是如何工作的。我举一个例子,我在内存中以这种方式存储数据C 这是memmove按相反顺序的正确方法吗?,c,memory-management,memmove,C,Memory Management,Memmove,我想了解memmove是如何工作的。我举一个例子,我在内存中以这种方式存储数据 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,它记录了下一个可以插入的位置,在上面给出的例子中,
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所占用的空闲空间。
输入是输入数组。
所以输入数组看起来像是前10个字符属于块A,下20个字符属于块B等等。
我认为使用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
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)
现在,如果我想删除块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)
有更好的方法吗
注意这不是为了家庭作业。
C
和D
一起占据50+10=60,那么为什么在memmove(输入+开始(B),输入+开始(B)+长度(B),20)
至于另一部分,在C中,对象不以最后一个字节开始(第一个字节位于最低地址,最后一个字节位于最高地址)。这一部分令人困惑。你说得对,亚历克斯,我对这一部分犯了错误,而对我正在编辑问题的另一部分,我也犯了错误。