Это чисто вопрос домашнего задания, так как я знаю, что вам действительно не следует пытаться сделать это в реальной жизни. Но я пытался сделать это правильно. Скажем, мы знаем постоянную начальную позицию, куда мы хотим скопировать, и точный размер фрагмента памяти, который мы хотим скопировать. Допустим, наш источник — это стек от 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
. Кто вам это сказал, тот не знает, о чем говорит. - person Ed S.   schedule 26.01.2013malloc
в C. Вам не нужно приведение, потому что любой тип указателя может быть неявно (и безопасно) преобразован вvoid*
, и это может фактически скрыть ошибку. - person Ed S.   schedule 26.01.2013