问题标签 [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.
c - memcpy 与 C 中的赋值
在什么情况下我应该期望 memcpys 在现代 INTEL/AMD 硬件上胜过分配?我在 32 位 Intel 平台上使用 GCC 4.2.x(但也对 64 位感兴趣)。
c++ - C++ 中指针类型的意义何在?
假设我有一些指针称为:
我知道它们都只是保存指向其他位置的内存地址,并且类型声明了特定指针指向的内存位置有多大。例如,一个 char 可能是系统上一个字节的大小,而一个 int 可能是 4 个字节。所以当我这样做时:
但是,如果我这样做:
谢谢..希望在这里得到任何澄清..指针类型是否仅用于 ++ 操作?
编辑:所以 avp 恰当地回答了我的问题,但我有一个后续问题,当我这样做时会发生什么:
它会复制2个字节吗?还是4个字节?我会有访问冲突吗?
编辑:根据 Ryan Fox 的说法,答案是 2 个字节,因为它们被强制转换为 (void*)。谢谢!关闭!
编辑:只是为了让未来的搜索者可以找到这个..我发现的另一条信息..
不会将 pInt+5bytelocations 指向的内存块的 2 个字节复制到 pChar+5bytelocations .. 发生的情况是 2 个字节从 pInt(4*5)bytelocations 复制到 pChar+5bytelocations .. 难怪我遇到访问冲突,我试图在我不应该阅读的地方阅读.. :)
c - 试图将结构成员复制到c中的字节数组
我试图将包含整数、字符和字符数组的结构的成员复制到字节数组中以发送到串行线路。到目前为止我有
当我获得此代码时,我并不完全理解它是如何工作的。我可以看到 memcpy 获取结构的每个元素并将其转换为由“i”变量索引的串行流,但我不知道 USARTWrite 函数如何将其打包成字符串,或者如何加载数组我的结构初始化。
抱歉,这篇文章有点长,但我刚刚开始这个编程云雀,并试图理解这个概念。
谢谢戴夫
编辑:
哇,很快就有很多好的答案 - 谢谢大家。
slaz:这对我来说似乎是合乎逻辑的,我还没有真正考虑过这种方法,因为我还没有真正理解指针,但是我开始看到它们是 C 的重要组成部分,所以我会适时拥有看看。
这行代码将数据发送到我的 UART,我将用什么替换包含消息内容的数组?似乎我在这里错过了一个逻辑步骤,我有一个变量告诉我我的结构从哪里开始以及它有多大,但没有要发送的数组
/li>
哈珀谢尔比:谢谢你的描述,这让我更清楚了。
rgds
戴夫
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()
。是否有任何逻辑比三个更喜欢一个(忽略前两个的缓冲区检查)?
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() 进行微优化会浪费很大的精力。
c++ - memcpy 没有按预期做
我有这段代码输出错误的结果。
我得到的输出是
字节 0xc0000000 浮点数 -2.000001e+00
我期待得到
字节 0xdeadbeef 浮点数 -6.2598534e+18
编辑#1,正如指出的那样,字节顺序可能不同,这将导致以下结果
字节 0xefbeadde 浮点数 -1.1802469e+29
我不明白的是从 float 转换为 unsigned int 导致 0xc0000000 (同一 printf 语句中的 float 为 -2.0000 我将归因于编译器优化)
这是以前在另一台计算机上工作的。这可能是架构更改。
c++ - 如何使用movntdqa避免缓存污染?
我正在尝试编写一个不会将源内存加载到 cpu 缓存的 memcpy 函数。目的是避免缓存污染。下面的 memcpy 函数可以工作,但会像标准 memcpy 一样污染缓存。我正在使用 P8700 proccesoor 和 Visual C++ 2008 express。我看到了英特尔 vtune 的 cpu 缓存使用情况。
我有另一个版本,具有相同的结果 - 工作但污染缓存。
更新:这是测试程序
c - 安全编程中的 Memcpy()?
我最近偶然发现了一篇文章,声称微软正在memcpy()
其安全编程商店中禁止该功能。我了解该功能固有的漏洞,但有必要完全禁止使用它吗?
我编写的程序应该memcpy()
完全避免,还是只是确保它被安全使用?有哪些替代品可以提供类似但更安全的功能?
memcpy - memcpy 不安全吗?
复制:
根据“请加入我,欢迎 memcpy() 加入 SDL Rogues Gallery ” memcpy
,因为不安全而被禁止。目标大小不清楚的gets()
,和类似的 api是有道理的。strcpy
是memmove()
下一个吗?
c - Microsoft SDL 和 memcpy 弃用
正如你们中的一些人可能知道的那样,微软禁止memcpy()
了他们的安全开发生命周期,取而代之的是memcpy_s()
.
因此,如果您的代码曾经是:
它成为了:
或者,通过截断,
对比
问题:额外的长度参数如何使代码更安全?要使用memcpy()
,我应该已经知道所有四个参数,并将适当的长度作为第三个参数传递。是什么阻止我犯同样的错误,即错误计算目标缓冲区大小并传递错误的值dst_size
?我不明白为什么它与它有任何不同memcpy()
以及为什么它被弃用。有什么我看不到的常见用例吗?我在这里想念什么?