c++ - 使用 memcpy 提高数组中随机插入的性能

标签 c++ arrays

我知道数组提供对其任何元素的恒定时间访问,但是从开始或中间插入或删除元素需要移动后续元素,有时需要调整大小和复制整个数组。这可以在最坏的情况下给出线性复杂度。

我们能否通过使用 memcpy 使数组中的随机插入更有效,如下例所示。

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    // your code goes here
    int arr[16] = {0};
    for ( int i = 0 ; i < 10 ; i++ )
    {
        arr[i] = 1;
    }
    std::cout << std::endl << "INPUT ARR:";
    for ( int i = 0 ; i < 16 ; i++ )
    {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;


    std::memcpy(arr+9,arr+8,sizeof(int)*2); arr[8] = 9;// std::cout << std::endl << "NO " << *(arr+8);
    for ( int i = 0 ; i < 16 ; i++ )
    {
        std::cout << arr[i] << " ";
    }
    return 0;
}

由于 memcpy 是直接在硬件中使用 DMA 实现的,没有任何 CPU 干扰,这种方法可以加快数组中随机位置的插入或删除。我错了吗?

提前致谢

最佳答案

Since memcpy is implemented directly in hardware using DMA without any CPU interference

这不是真的,至少在现代 x86 CPU 上是这样。参见 x86-64 GNU libc memcpy implementation .

另一个注意事项是 memcpy 不能用于重叠的内存区域。为此需要使用 memmove

关于c++ - 使用 memcpy 提高数组中随机插入的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37699412/

相关文章:

c++ - memcpy 和 std 组件,例如 map : runtime failer

c++ - 如果包含重复元素,如何合并多个 vector ?

javascript::如何使用数组中的javascript变量在传单上绘制多边形

javascript - 在属性中查找数组中具有最高值的对象的索引

arrays - C 将宏作为参数指针传递

c++ - 使用 socket.io 将应用程序连接到 Node 服务器

c++ - C++ 11中与std::atomic的同步

c++ - 在 .cpp 中声明外部变量而不是头文件有什么用?

java - 如何使用 PostgreSQL 和 Hibernate 映射 Java 多维数组

javascript - 查询 JavaScript 父子对象