交换内存块
Swap blocks of memory
有两个大小不同的内存块。有没有办法在不分配新内存的情况下交换两个大小相等的部分?
当然,只需使用 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
调用。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 证明shrink_to_fit或交换保证释放矢量的内存
- 如何将来自闪存中不同银行的两个内存区域交换为STM32L475
- 为什么在开始绘制获取的交换链图像时不需要内存障碍?
- 使用C++原子库,我应该使用什么样的内存顺序进行加载,然后进行比较交换
- 向量交换的向量中的分割故障,将内存分配给指针为向量的向量
- 交换内存块
- 使用复制和交换习惯用法,复制对象的析构函数如何不解除分配指向内存
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- 是否有一个快速的内存中队列,我可以使用它在达到一定大小时交换项目
- 如何最好地处理具有未初始化内存的复制交换习惯用法
- 使用公用指针交换指向已分配内存的指针
- linux上c++线程间的线程安全数据交换/共享内存
- ram +交换内存最大限制的异常处理
- 在内存映射文件中交换字节的有效方式
- Memcached如何确保其内存中的页面不会被其他页面交换