C++中的交换内存

swap memory in C++

我正在尝试交换堆栈上的一些寄存器值。例如L0,L1...L10 应变为 L10,L9,..L0。这些寄存器值存储在缓冲区“target_types::buf”中。

void reverse_local_regs(int size, int offset)
{
  const int BYTES_PER_REGISTER = 4;
  uint8_t temp_reg[BYTES_PER_REGISTER];
  for (int i = 0; i < size; i += BYTES_PER_REGISTER)
  {
    memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
    memcpy(&target_types::buf[offset + i], &target_types::buf[offset + size - i - 4], BYTES_PER_REGISTER);
    memcpy(&target_types::buf[offset + size - i - 4], temp_reg, BYTES_PER_REGISTER);
  }
}

我写了这个函数,但它根本没有改变内存。为了验证内存是否保持不变,我编写了以下打印“Same mem”的代码。

  uint8_t test[2048];
  memcpy(test, target_types::buf, 2048);
  reverse_local_regs(BYTES_PER_REGISTER * FL, FP_SR_PC_offset);
  if (memcmp(test, target_types::buf, 2048) == 0)
    std::cout << "Same mem" << std::endl;
  else
    std::cout << "different mem" << std::endl;

我做错了什么?

我认为它需要括号
迭代器 i 也应该停在一半 size
否则下半场换回来

void reverse_local_regs(int size, int offset)
{
  const int BYTES_PER_REGISTER = 4;
  uint8_t temp_reg[BYTES_PER_REGISTER];
  for (int i = 0; i < size/2; i += BYTES_PER_REGISTER)
  {
    memcpy(temp_reg, &target_types::buf[offset + i], BYTES_PER_REGISTER);
    memcpy(&target_types::buf[offset + i], &target_types::buf[offset + (size - (i + 4))], BYTES_PER_REGISTER);
    memcpy(&target_types::buf[offset + (size - (i + 4))], temp_reg, BYTES_PER_REGISTER);
  }
}