c++ - 在 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);
}
}
推荐阅读
- haskell - 我如何在 Nats 上定义乘法?
- jquery - jQuery 在尝试验证输入字段时没有响应
- r - 在 r 中合并后的两个数据框显示 <0 rows> (或 0 长度行名称)
- plot - 自定义图例标签 - geopandas.plot()
- encoding - FFmpeg - 将 AC3 5.1 下混到 Fraunhofer FDK ACC 2.1
- python - 如何更准确地划分大数
- php - Api 请求与邮递员和 resteasy 一起工作,但在 php curl 中不工作
- vhdl - 这种 VHDL 状态机设计方法的缺点是什么?
- python - 计数器无法正常工作
- c# - 计算大数的乘积