问题标签 [memcpy]

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 回答
23876 浏览

c - memcpy 与 C 中的赋值

在什么情况下我应该期望 memcpys 在现代 INTEL/AMD 硬件上胜过分配?我在 32 位 Intel 平台上使用 GCC 4.2.x(但也对 64 位感兴趣)。

0 投票
5 回答
951 浏览

c++ - C++ 中指针类型的意义何在?

假设我有一些指针称为:

我知道它们都只是保存指向其他位置的内存地址,并且类型声明了特定指针指向的内存位置有多大。例如,一个 char 可能是系统上一个字节的大小,而一个 int 可能是 4 个字节。所以当我这样做时:

但是,如果我这样做:

谢谢..希望在这里得到任何澄清..指针类型是否仅用于 ++ 操作?

编辑:所以 avp 恰当地回答了我的问题,但我有一个后续问题,当我这样做时会发生什么:

它会复制2个字节吗?还是4个字节?我会有访问冲突吗?

编辑:根据 Ryan Fox 的说法,答案是 2 个字节,因为它们被强制转换为 (void*)。谢谢!关闭!

编辑:只是为了让未来的搜索者可以找到这个..我发现的另一条信息..

不会将 pInt+5bytelocations 指向的内存块的 2 个字节复制到 pChar+5bytelocations .. 发生的情况是 2 个字节从 pInt(4*5)bytelocations 复制到 pChar+5bytelocations .. 难怪我遇到访问冲突,我试图在我不应该阅读的地方阅读.. :)

0 投票
7 回答
34530 浏览

c - 试图将结构成员复制到c中的字节数组

我试图将包含整数、字符和字符数组的结构的成员复制到字节数组中以发送到串行线路。到目前为止我有

当我获得此代码时,我并不完全理解它是如何工作的。我可以看到 memcpy 获取结构的每个元素并将其转换为由“i”变量索引的串行流,但我不知道 USARTWrite 函数如何将其打包成字符串,或者如何加载数组我的结构初始化。

抱歉,这篇文章有点长,但我刚刚开始这个编程云雀,并试图理解这个概念。

谢谢戴夫

编辑:

哇,很快就有很多好的答案 - 谢谢大家。

slaz:这对我来说似乎是合乎逻辑的,我还没有真正考虑过这种方法,因为我还没有真正理解指针,但是我开始看到它们是 C 的重要组成部分,所以我会适时拥有看看。

  • 这行代码将数据发送到我的 UART,我将用什么替换包含消息内容的数组?似乎我在这里错过了一个逻辑步骤,我有一个变量告诉我我的结构从哪里开始以及它有多大,但没有要发送的数组

    /li>

哈珀谢尔比:谢谢你的描述,这让我更清楚了。

rgds

戴夫

0 投票
17 回答
35425 浏览

c - C strcpy() - 邪恶?

有些人似乎认为 C 的strcpy()功能是坏的或邪恶的。虽然我承认通常最好使用它strncpy()来避免缓冲区溢出,但以下(strdup()对于那些没有幸运拥有它的人的函数实现)安全地使用strcpy()并且永远不应该溢出:

*s2保证有足够的空间来存储*s1,并且 using 使strcpy()我们不必将strlen()结果存储在另一个函数中,以便以后用作strncpy(). 然而有些人用strncpy(),甚至编写这个函数memcpy(),它们都需要一个长度参数。我想知道人们对此有何看法。如果您认为strcpy()在某些情况下是安全的,请说出来。如果您有充分的理由不在strcpy()这种情况下使用,请给出 - 我想知道为什么在这种情况下使用它可能会strncpy()更好memcpy()。如果您认为strcpy()还可以,但不在这里,请解释。

基本上,我只是想知道为什么有些人memcpy()在其他人使用而其他人使用时strcpy()使用 plain strncpy()。是否有任何逻辑比三个更喜欢一个(忽略前两个的缓冲区检查)?

0 投票
3 回答
6350 浏览

c - 为 Core 2 或 Core i7 架构全面优化的 memcpy/memmove?

具有 DDR3 双通道内存的 Core 2 处理器的理论最大内存带宽令人印象深刻:根据Wikipedia关于架构的文章,每秒 10+ 或 20+ GB。但是,股票 memcpy() 调用无法达到此目的。(3 GB/s 是我在此类系统上见过的最高值。)这可能是由于操作系统供应商要求 memcpy() 根据处理器的特性针对每条处理器线进行调整,因此库存 memcpy() 实现在广泛的品牌和线路上应该是合理的。

我的问题:是否有可在 C 程序中使用的针对 Core 2 或 Core i7 处理器的免费、高度调整的版本?我敢肯定,我不是唯一一个需要它的人,每个人都对自己的 memcpy() 进行微优化会浪费很大的精力。

0 投票
5 回答
1797 浏览

c++ - memcpy 没有按预期做

我有这段代码输出错误的结果。

我得到的输出是

字节 0xc0000000 浮点数 -2.000001e+00

我期待得到

字节 0xdeadbeef 浮点数 -6.2598534e+18

编辑#1,正如指出的那样,字节顺序可能不同,这将导致以下结果

字节 0xefbeadde 浮点数 -1.1802469e+29

我不明白的是从 float 转换为 unsigned int 导致 0xc0000000 (同一 printf 语句中的 float 为 -2.0000 我将归因于编译器优化)

这是以前在另一台计算机上工作的。这可能是架构更改。

0 投票
1 回答
4409 浏览

c++ - 如何使用movntdqa避免缓存污染?

我正在尝试编写一个不会将源内存加载到 cpu 缓存的 memcpy 函数。目的是避免缓存污染。下面的 memcpy 函数可以工作,但会像标准 memcpy 一样污染缓存。我正在使用 P8700 proccesoor 和 Visual C++ 2008 express。我看到了英特尔 vtune 的 cpu 缓存使用情况。

我有另一个版本,具有相同的结果 - 工作但污染缓存。

更新:这是测试程序

0 投票
10 回答
31898 浏览

c - 安全编程中的 Memcpy()?

我最近偶然发现了一篇文章,声称微软正在memcpy()其安全编程商店中禁止该功能。我了解该功能固有的漏洞,但有必要完全禁止使用它吗?

我编写的程序应该memcpy()完全避免,还是只是确保它被安全使用?有哪些替代品可以提供类似但更安全的功能?

0 投票
2 回答
8078 浏览

memcpy - memcpy 不安全吗?

复制:

安全编程中的 Memcpy()?


根据“请加入我,欢迎 memcpy() 加入 SDL Rogues Gallerymemcpy,因为不安全而被禁止。目标大小不清楚的gets(),和类似的 api是有道理的。strcpymemmove()下一个吗?

0 投票
7 回答
5180 浏览

c - Microsoft SDL 和 memcpy 弃用

正如你们中的一些人可能知道的那样,微软禁止memcpy()了他们的安全开发生命周期,取而代之的是memcpy_s().

因此,如果您的代码曾经是:

它成为了:

或者,通过截断,

对比

问题:额外的长度参数如何使代码更安全?要使用memcpy(),我应该已经知道所有四个参数,并将适当的长度作为第三个参数传递。是什么阻止我犯同样的错误,即错误计算目标缓冲区大小并传递错误的值dst_size?我不明白为什么它与它有任何不同memcpy()以及为什么它被弃用。有什么我看不到的常见用例吗?我在这里想念什么?