交换内存块

Swap blocks of memory

本文关键字:内存 交换      更新时间:2023-10-16

有两个大小不同的内存块。有没有办法在不分配新内存的情况下交换两个大小相等的部分?

当然,只需使用 std::swap_ranges . 例如,如果你有一个std::vector<int> v(100)和一个int array[200];你可以做

std::swap_ranges(std::begin(v), std::end(v), array+50);

将向量中的值与数组中间的值交换。

具体说明内存使用情况:如果您有复杂的迭代器或对象类型,则可能需要一个堆栈帧来进行比较、取消引用或赋值运算符。 swap_ranges是否需要自己的堆栈帧取决于实现。

在上面的例子中,我希望一切都被优化为一个简单的循环。 (我试图分析它,但我的简单测试用例被优化为一系列printf调用。