这纯粹是一个家庭作业问题,因为我知道你真的不应该在现实生活中尝试这样做。但我一直在努力解决这个问题。假设我们知道要复制的永久起始位置以及要复制的内存块的确切大小。假设我们的源是从 0x28000 到 0x2C0000 的堆栈。堆栈向下增长,因此我们得到了一个指向堆栈顶部的指针(0x2C0000)。我们想将 STACK_SIZE 字节复制到第二个堆栈,其顶部位于 0x30000。基本上是这样的:
Stack 1 Stack 2
/--+-------------------+-------------------+--/
| ABXLQPAOSRJ| |
/--+-------------------+-------------------+--/
0x280000 0x2C0000 0x300000
^ ^
| |
Top of stack 1 Top of Stack 2
如果我们必须使用 memcpy,我们必须从 0x28000 开始,对吗?(我不完全确定 memcpy 读取的方向;从较高地址到较低地址,反之亦然)这是正确的吗?
void* s = (void *)source_stack_bottom //where source_stack_bottom is 0x280000 in this case
void* d = (void *)dest_stack_bottom //which is 0x2C0000
memcpy(d, s, STACK_SIZE) //STACK_SIZE is just a variable with the stack size
我想不出为什么它不应该工作,但话又说回来,我仍然对 C 有时如何分配内存感到困惑,所以......
编辑:: 哎呀,变量混乱。现在修好了。