繁体   English   中英

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

[英]C - copying directly from memory using memcpy

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

是的, memcpy()从传递给它的基址开始计数。

如果最终为嵌入式系统编写了“裸机”的无操作系统软件,或者您自己实现了操作系统或内核,那么您可能非常需要做这样的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM