草庐IT

c++ - 在什么情况下我应该在 C++ 中使用 memcpy 而不是标准运算符?

我什么时候可以使用memcpy获得更好的性能,或者我如何从使用它中受益?例如:floata[3];floatb[3];是代码:memcpy(a,b,3*sizeof(float));比这个更快?a[0]=b[0];a[1]=b[1];a[2]=b[2]; 最佳答案 效率不应该是您关心的问题。编写干净的可维护代码。这么多答案表明memcpy()效率低下,这让我很困扰。它被设计成最有效的内存块复制方式(用于C程序)。所以我写了以下内容作为测试:#includeexternfloata[3];externfloatb[3];externv

c++ - memcpy 与 startIndex?

我希望从一个特定的起点将特定长度的内容从一个缓冲区复制到另一个缓冲区。我检查了memcpy()但它只需要复制内容的长度,而我也想指定起始索引。是否有任何函数可以做到这一点,或者有什么好的方法可以用现有的memcpy函数做到这一点? 最佳答案 我总是喜欢语法memcpy(&dst[dstIdx],&src[srcIdx],numElementsToCopy*sizeof(Element)); 关于c++-memcpy与startIndex?,我们在StackOverflow上找到一个类似的

c++ - memcpy vs for 循环 - 从指针复制数组的正确方法是什么?

我有一个函数foo(int[]nums),我理解它本质上等同于foo(int*nums)。在foo内部,我需要将nums指向的数组的内容复制到范围内声明的一些int[10]中富。我理解以下内容无效:voidfoo(int[]nums){myGlobalArray=*nums}复制数组的正确方法是什么?我应该像这样使用memcpy:voidfoo(int[]nums){memcpy(&myGlobalArray,nums,10);}还是应该使用for循环?voidfoo(int[]nums){for(inti=0;i我还缺少第三种选择吗? 最佳答案

c++ - 为什么 std::memcpy 的行为对于不是 TriviallyCopyable 的对象是未定义的?

来自http://en.cppreference.com/w/cpp/string/byte/memcpy:IftheobjectsarenotTriviallyCopyable(e.g.scalars,arrays,C-compatiblestructs),thebehaviorisundefined.在我的工作中,我们长期使用std::memcpy来按位交换不是TriviallyCopyable的对象:voidswapMemory(Entity*ePtr1,Entity*ePtr2){staticconstintsize=sizeof(Entity);charswapBuffer[

c++ - 为什么 memcpy() 和 memmove() 比指针增量快?

我将N个字节从pSrc复制到pDest。这可以在一个循环中完成:for(inti=0;i为什么这比memcpy或memmove慢?他们使用什么技巧来加快速度? 最佳答案 因为memcpy使用字指针而不是字节指针,所以memcpy实现也经常用SIMD编写指令可以一次洗牌128位。SIMD指令是汇编指令,可以对最长16字节的vector中的每个元素执行相同的操作。这包括加载和存储指令。 关于c++-为什么memcpy()和memmove()比指针增量快?,我们在StackOverflow上找

c++ - 快速复制 `std::vector<std::uint8_t>`

我有一个std::vector,需要复制。这只需调用复制构造函数即可完成。我的分析结果显示,MicrosoftVisualC++(msvc100)实现使用std::uninitialized_copy内部。这将一个接一个地复制每个元素。在这种情况下,可以通过一次复制整个内存块来完成更优化的复制(例如memcpy可能会这样做)。换句话说,这可能是一个重要的优化。有没有办法强制vector使用这种优化的方法?注意:我尝试过使用std::basic_string,它的性能确实更好,但它还有其他问题。 最佳答案 此答案并非特定于msvc10

c++ - 快速复制 `std::vector<std::uint8_t>`

我有一个std::vector,需要复制。这只需调用复制构造函数即可完成。我的分析结果显示,MicrosoftVisualC++(msvc100)实现使用std::uninitialized_copy内部。这将一个接一个地复制每个元素。在这种情况下,可以通过一次复制整个内存块来完成更优化的复制(例如memcpy可能会这样做)。换句话说,这可能是一个重要的优化。有没有办法强制vector使用这种优化的方法?注意:我尝试过使用std::basic_string,它的性能确实更好,但它还有其他问题。 最佳答案 此答案并非特定于msvc10

c++ - 我可以在 C++ 中使用 memcpy 来复制没有指针或虚函数的类吗

假设我有一个类,如下所示;classMyClass{public:MyClass();inta,b,c;doublex,y,z;};#definePageSize1000000MyClassArray1[PageSize],Array2[PageSize];如果我的类没有指针或虚方法,那么使用以下内容是否安全?memcpy(Array1,Array2,PageSize*sizeof(MyClass));我问的原因是,我正在处理非常大的分页数据集合,如here所述,其中性能至关重要,而memcpy与迭代分配相比具有显着的性能优势。我怀疑应该没问题,因为“this”指针是一个隐式参数,而不

c++ - 我可以在 C++ 中使用 memcpy 来复制没有指针或虚函数的类吗

假设我有一个类,如下所示;classMyClass{public:MyClass();inta,b,c;doublex,y,z;};#definePageSize1000000MyClassArray1[PageSize],Array2[PageSize];如果我的类没有指针或虚方法,那么使用以下内容是否安全?memcpy(Array1,Array2,PageSize*sizeof(MyClass));我问的原因是,我正在处理非常大的分页数据集合,如here所述,其中性能至关重要,而memcpy与迭代分配相比具有显着的性能优势。我怀疑应该没问题,因为“this”指针是一个隐式参数,而不

C++ memcpy 返回值

根据http://en.cppreference.com/w/cpp/string/byte/memcpyC++的memcpy采用三个参数:目标、源和大小/字节。它还返回一个指针。void*memcpy(void*dest,constvoid*src,std::size_tcount);为什么会这样?参数还不够输入和复制数据吗?我是不是误会了什么?示例不使用返回值。 最佳答案 如果一个函数没有特定的返回值,通常习惯上返回一个输入参数(被视为主要参数的那个)。这样做允许您在表达式中使用“链式”函数调用。例如,你可以这样做charbuf