gpt4 book ai didi

C - 使用 memcpy 直接从内存中复制

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:11 24 4
gpt4 key购买 nike

这纯粹是一个家庭作业问题,因为我知道你真的不应该在现实生活中尝试这样做。但我一直在努力做到这一点。假设我们知道要复制的永久起始位置以及要复制的内存块的确切大小。所以说我们的源是从 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 有时如何分配内存感到困惑,所以......

编辑:糟糕,变量困惑。现已修复。

最佳答案

memcpy() 的简单实现是这样的:

void naive_memcpy(void *destt, void *sourcet, size_t size)
{
char *source = (char *)sourcet;
char *dest = (char *)destt;
for(size_t s = 0; s < size; s++){ *dest++ = *source++; }
}

所以是的,它从 sourcedest 开始向上计数

关于C - 使用 memcpy 直接从内存中复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com