问题标签 [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.

0 投票
1 回答
1535 浏览

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 上的两个索引会导致它开始复制到正确的位置。

任何帮助将非常感激!

0 投票
4 回答
2187 浏览

c - memmove 与复制单个数组元素

在 CLRS 第 2 章中有一个练习,询问是否将插入排序的最坏情况运行时间改进为O(n lg n). 看到这个问题,发现做不到。

无法改善最坏情况的复杂性,但memmove与单独移动数组元素相比,使用实际运行时间会更好吗?

单独移动元素的代码

使用移动元素的代码 memmove

我无法让第二个完美运行,但这是我正在考虑做的一个例子。

使用 会有任何明显的速度改进memmove吗?

0 投票
2 回答
1055 浏览

c - 按位记忆移动

实现按位的最佳方法是什么memmove?该方法应该采用额外的目标和源位偏移量,并且计数也应该以位为单位。

  • 我看到 ARM 提供了一个 non-standard _membitmove,这正是我需要的,但我找不到它的来源。
  • Bind 的 bitset 包含isc_bitstring_copy,但效率不高
  • 我知道 C 标准库没有提供这种方法,但我也找不到任何提供类似方法的第三方代码。
0 投票
2 回答
481 浏览

c - memmove 没有复制缓冲区的所有内容 - C

我有以下代码,其中我试图创建一个长度为 7 个字节的缓冲区,然后将一个整数与缓冲区中的 char 数组一起按网络字节顺序放置,我的sprintf()缓冲区末尾不应该有 Null 字符所以我memcpy()过去只复制 7 个字节。但是,我似乎在memcpy().

代码:

我得到以下输出:

0 投票
1 回答
335 浏览

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实际上是一种悲观。(一点点悲观,可能无法衡量,但仍然)memcpymemmove

回到问题:我的总结是否正确?这在任何地方都有问题吗?无论指定什么,是否有可能的实际实现memcpy也不能满足 的要求std::copymemcpy当范围部分重叠时是否存在中断的实现?std::copy

0 投票
2 回答
400 浏览

c - 关于 memmove 的实现

我在wikibooks.org上查看公共领域的实现。它实现 memmove() 如下明确声明它“不是完全可移植的”!我想知道为什么:

  1. 括号放在代码的第一行,并且
  2. 代码不是完全可移植的。

代码如下:

0 投票
1 回答
869 浏览

c - 在 memmove 中使用 __np_anyptrlt?

从这个链接: http ://clc-wiki.net/wiki/memmove

使用是__np_anyptrlt多余的吗?为什么不直接使用if (ps < pd)

0 投票
1 回答
148 浏览

memcpy - 什么时候应该使用 memcpy,什么时候应该使用 memmove?

memcpy 和 memmove 函数之间有什么重要区别吗?什么时候应该使用 memcpy,什么时候应该使用 memmove?

0 投票
3 回答
1313 浏览

c - 在重叠区域上安全使用 memcpy

在以下场景中使用是否安全memcpy,其中将数据从较大的索引复制到一个块到同一块中的较小索引。例如:

在上述情况下,我不关心来自位置 10 - 19 的数据,如果它被覆盖就可以了。有什么理由应该避免和memmove使用它吗?

编辑:对不起,我没有正确传达我的意图,所以假设我有来自索引 10 - 19 的数据和来自索引 15 - 24 的数据,我想从 15 - 24 复制 10 - 19 的数据,我不在乎关于 10 到 19 的数据,memcpy即使它们重叠,对我们来说安全吗?

0 投票
5 回答
1150 浏览

c++ - memmove 是否移动元素(与 for 循环相同),还是一次抓取整个内存块?

在我的算法课中,我们必须上交用于删除整数列表重复项的算法,并尽可能降低复杂度。在我的算法中,当我看到一个重复的整数时,我将该整数之后的每个元素向下移动一个索引,以便使用 for 循环删除重复的元素;像这样:

我的算法使用 memmove 会更有效吗?此外,如果设计算法是我的工作,并且假设 memmove 降低了我的算法的复杂性,那么使用 memmove 会被视为“作弊”吗?