Tag: memmove

memmove真的“移动”了一大块内存并在源头留下了零吗?

可能重复: memcpy vs memmove memmove真的“移动”了一大块记忆吗? 如果是这样,它会留下内存零吗? 或者,它就像memcpy ? 我正在查看手册页,我不相信我的假设是正确的。 如果我想使用memmove移动一块内存,我是否必须手动将我移动的内存块清零?

Bitwise memmove

实现按位memmove的最佳方法是什么? 该方法应该采用额外的目标和源位偏移,并且计数也应该是位。 我看到ARM提供了一个非标准的_membitmove ,它正是我所需要的,但我找不到它的来源。 Bind的bitset包括isc_bitstring_copy ,但效率不高 我知道C标准库没有提供这样的方法,但我也找不到提供类似方法的任何第三方代码。

memcpy vs C中的赋值 – 应该是memmove吗?

正如在这个问题的答案中指出的那样,编译器(在这种情况下是gcc-4.1.2,是的,它是旧的,我不能改变它)可以用它认为合适的memcpy替换结构赋值。 我正在valgrind下运行一些代码,并收到有关memcpy源/目标重叠的警告。 当我查看代码时,我看到了这一点(释义): struct outer { struct inner i; // lots of other stuff }; struct inner { int x; // lots of other stuff }; void frob(struct inner* i, struct outer* o) { o->i = *i; } int main() { struct outer o; // assign a bunch of fields in o->i… frob(&o.i, o); return […]

为什么Linux memmove()以它的方式实现?

从memmove的Linux 手册(3) memmove()函数将n个字节从内存区域src复制到内存区域dest。 存储区可能重叠:复制发生就像src中的字节首先被复制到一个不与src或dest重叠的临时数组中,然后将字节从临时数组复制到dest。 不是分配临时数组并将值复制两次,我们可以执行以下操作: void *my_memmove(void *dest, const void *src, size_t n) { signed char operation; size_t end; size_t current; if(dest != src) { if(dest < src) { operation = 1; current = 0; end = n; } else { operation = -1; current = n – 1; end = -1; } for( ; […]

当memcpy()比memmove()更快时,真正的重要案例是什么?

memcpy()和memmove()之间的关键区别在于,当源和目标重叠时, memmove()将正常工作。 当缓冲区肯定不重叠时, memcpy()更可取,因为它可能更快。 困扰我的是这个潜在的 。 它是一个微优化还是当memcpy()更快时有真正重要的例子,所以我们真的需要使用memcpy()而不是到处都有memmove() ?

请查看重叠内存块的memcpy()的这种莫名其妙的行为和输出

在阅读了关于memcpy()的以下内容之后,我继续阅读有关memmove() : To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes, and should not overlap (for overlapping memory blocks, memmove is a safer approach). (链接) 在检查用于说明memmove()的工作的程序之后,我决定使用memcpy()来调整它,而不是看看输出有多么不同。令我惊讶的是,它们是相同的,即使它是重叠内存块的情况这是程序和输出,之后我开始描述我的困惑: #include #include int main () { char str[] = “memmove can be very useful……”; //memmove (str+20,str+15,11); […]

mem中的C实现

有人可以帮助我理解如何在C中实现memmove。我只有一个特殊条件吗? if((src dst)) copy from the back 它还取决于堆栈的增长方式吗?