问题标签 [memmove]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C 中的 Memmove 和 SIGSEGV 问题
我在 C 中的 memmove 有一些问题。据我所知,这两个位置都是有效的内存地址,我可以在执行 memmove 之前打印两个内存位置的内容,但是一旦我尝试 memmove ,该函数因 SIGSEGV 而崩溃。
这是有问题的代码:
缓存被声明为 float** ,而 page 是一个 float* ,其中包含可变大小的浮点数组。然而,数组的大小不太可能成为问题,因为我什至无法将它复制到单个浮点数上,尽管 page 无疑包含一个浮点数,这可以从 page[0] 和 page 的有效打印中得到证明[1]。
Cache[0] 和 Cache[1] (索引永远只会是 0 或 1,这也得到证实)都是指向结构对象中的 float** 的先前 calloc-ed 缓存的指针。这可以在这里看到:
其中 sizeOfCache 最初用于声明我们想要为 queryOb->cache 调用多少个大小为 float* 的块。
我一生都无法弄清楚为什么这个 memmove 会产生 sigsegv,我相信这可能与从 float* 到 float** 的 memmove 有关,但是我认为使用 memmove 上的两个索引会导致它开始复制到正确的位置。
任何帮助将非常感激!
c - memmove 与复制单个数组元素
在 CLRS 第 2 章中有一个练习,询问是否将插入排序的最坏情况运行时间改进为O(n lg n)
. 看到这个问题,发现做不到。
无法改善最坏情况的复杂性,但memmove
与单独移动数组元素相比,使用实际运行时间会更好吗?
单独移动元素的代码
使用移动元素的代码 memmove
我无法让第二个完美运行,但这是我正在考虑做的一个例子。
使用 会有任何明显的速度改进memmove
吗?
c - 按位记忆移动
实现按位的最佳方法是什么memmove
?该方法应该采用额外的目标和源位偏移量,并且计数也应该以位为单位。
- 我看到 ARM 提供了一个 non-standard
_membitmove
,这正是我需要的,但我找不到它的来源。 - Bind 的 bitset 包含
isc_bitstring_copy
,但效率不高 - 我知道 C 标准库没有提供这种方法,但我也找不到任何提供类似方法的第三方代码。
c - memmove 没有复制缓冲区的所有内容 - C
我有以下代码,其中我试图创建一个长度为 7 个字节的缓冲区,然后将一个整数与缓冲区中的 char 数组一起按网络字节顺序放置,我的sprintf()
缓冲区末尾不应该有 Null 字符所以我memcpy()
过去只复制 7 个字节。但是,我似乎在memcpy()
.
代码:
我得到以下输出:
c++ - std::copy 的限制是否比 std::memcopy 更宽松?
关于copy vs. memcpy vs memmove (excellent info here, btw.)的问题,我一直在阅读, 在我看来,这与俗语不同,例如在cppreference注意:memcpy 已更改为memmove 自从引用了这个报价。 --
笔记
在实践中,
std::copy
避免多次赋值并使用批量复制功能,例如std::memcpy
如果值类型是TriviallyCopyable
-- std::copy
(nor std::copy_backward
)不能根据 来实现memcopy
,因为std::copy
只有目标范围的开头不能落入源范围,但整个memcpy
范围不能重叠。
查看 Visual-C++ 的实现(参见xutility
标题),我们还可以观察到 VC++ 使用memmove,但现在它的要求比std::copy
:
...对象可能重叠:复制就像将字符复制到临时字符数组中一样,然后从数组中复制字符...
所以看起来不可能实现,但使用std::copy
实际上是一种悲观。(一点点悲观,可能无法衡量,但仍然)memcpy
memmove
回到问题:我的总结是否正确?这在任何地方都有问题吗?无论指定什么,是否有可能的实际实现memcpy
也不能满足 的要求,std::copy
即memcpy
当范围部分重叠时是否存在中断的实现?std::copy
c - 在 memmove 中使用 __np_anyptrlt?
从这个链接: http ://clc-wiki.net/wiki/memmove
使用是__np_anyptrlt
多余的吗?为什么不直接使用if (ps < pd)
?
memcpy - 什么时候应该使用 memcpy,什么时候应该使用 memmove?
memcpy 和 memmove 函数之间有什么重要区别吗?什么时候应该使用 memcpy,什么时候应该使用 memmove?
c - 在重叠区域上安全使用 memcpy
在以下场景中使用是否安全memcpy
,其中将数据从较大的索引复制到一个块到同一块中的较小索引。例如:
在上述情况下,我不关心来自位置 10 - 19 的数据,如果它被覆盖就可以了。有什么理由应该避免和memmove
使用它吗?
编辑:对不起,我没有正确传达我的意图,所以假设我有来自索引 10 - 19 的数据和来自索引 15 - 24 的数据,我想从 15 - 24 复制 10 - 19 的数据,我不在乎关于 10 到 19 的数据,memcpy
即使它们重叠,对我们来说安全吗?
c++ - memmove 是否移动元素(与 for 循环相同),还是一次抓取整个内存块?
在我的算法课中,我们必须上交用于删除整数列表重复项的算法,并尽可能降低复杂度。在我的算法中,当我看到一个重复的整数时,我将该整数之后的每个元素向下移动一个索引,以便使用 for 循环删除重复的元素;像这样:
我的算法使用 memmove 会更有效吗?此外,如果设计算法是我的工作,并且假设 memmove 降低了我的算法的复杂性,那么使用 memmove 会被视为“作弊”吗?