问题标签 [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 投票
5 回答
2259 浏览

c++ - memmove、memcpy 和 new

我正在制作一个简单的字节缓冲区,它将其数据存储在使用 new 获取的 char 数组中,我只是想知道如果 memcpy 和 memmove 函数用于使用 new 获取的内存是否会给我带来任何奇怪的东西,或者有什么你会推荐做的?

0 投票
2 回答
1649 浏览

performance - 现代机器的内存带宽性能

我正在设计一个偶尔需要复制大量内存的实时系统。内存由非微小区域组成,因此我预计复制性能将相当接近相关组件(CPU、RAM、MB)可以执行的最大带宽。这让我想知道现代商品机器可以召集什么样的原始内存带宽?

如果我使用 1 个线程,我老化的 Core2Duo 给我 1.5 GB/s memcpy()(如果我同时使用两个内核,可以理解更少memcpy()。)虽然 1.5 GB 是相当多的数据,但我正在处理的实时应用程序将有大约是 1/50 秒,这意味着 30 MB。基本上,几乎没有。也许最糟糕的是,当我添加多个内核时,我可以处理更多数据,而无需为所需的复制步骤增加任何性能。

但如今,低端 Core2Due 并不是很热门的东西。是否有任何网站提供有关当前和近期硬件上的原始内存带宽的信息,例如实际基准测试?

此外,对于在内存中复制大量数据,是否有任何捷径,或者memcpy()尽可能好?

鉴于一堆核心无事可做,只能在短时间内复制尽可能多的内存,我能做的最好的事情是什么?

编辑:我仍在寻找有关原始内存复制性能的良好信息。我刚刚运行了我的旧memcpy()基准。相同的机器和设置,现在提供 2.5 GB/s...

0 投票
2 回答
749 浏览

memcpy - 使用 memcpy 将 jnz 更改为 jmp

没有太多使用 memcpy,但这是我的代码不起作用。

(enginebase+0x74C9D) 是指向我要修补的字节地址的指针位置。

(void *)0xEB 是我想要的那种 jmp 的操作码。

唯一的问题是,这会在线路尝试运行的那一刻崩溃,我不知道我做错了什么,有什么煽动吗?

0 投票
1 回答
295 浏览

memcpy - ReadProcessMemory 到 memcpy 的转换。需要帮忙

我在用着:

将一段内存存储到一个字节数组中,但我意识到这很草率,因为我在同一个地址空间中,但我不知道如何用 memcpy 做同样的事情。

0 投票
6 回答
625 浏览

c - C 中的原始数据类型,用于表示 CPU-arch 的 WORD 大小

我观察到 long 的大小总是等于任何给定 CPU 架构的 WORD 大小。对所有架构都适用吗?我正在寻找一种可移植的方式来表示 C 中的 WORD 大小的变量。

0 投票
5 回答
1680 浏览

c++ - MemSet & MemCopy

我正在编写一个内存分配器,我需要一种将整数存储在一块内存中的方法。这个整数将表示块的大小,因此我可以在给出指向开头的指针的情况下导航到结尾。

这是我的测试示例:

// 编辑:为 testInt 声明空间 int* testInt = new int;

这会在倒数第二行引发分段错误。

我想做的事情有意义吗?

如果是这样,正确的方法是什么?

非常感谢大家的帮助!!问题解决了 :-)

0 投票
2 回答
1856 浏览

c++-cli - 使用 memcpy 复制托管结构

我在混合模式下工作(在一个程序集中管理 C++ 和 C++)。我处于这样的情况。

然后我调用下面给出的“方法”并将其传递给“& managedStructure”

我对这种情况有以下疑问。

1)像这样使用memcpy安全吗?如果不是,实现相同功能的替代方法是什么?(我不能改变“方法”的定义)

2)我没有释放任何内存,因为这两个结构都是托管的。好吗?

0 投票
4 回答
1301 浏览

c - linux上的memcpy分段错误,但不是os x

我正在为一个文件实现一个基于日志的文件系统作为一个类项目。我在我的 64 位 OS X 笔记本电脑上运行了大量的代码,但是当我尝试在 CS 部门的 32 位 linux 机器上运行代码时,我遇到了一个段错误。

我们提供的 API 允许一次写入 DISK_SECTOR_SIZE (512) 字节。我们的日志记录包含用户想要写入的 512 字节以及一些元数据(他想要写入的扇区、操作类型等)。

总而言之,“记录”对象的大小是 528 字节,这意味着每条日志记录跨越磁盘上的 2 个扇区。

第一条记录在扇区 0 上写入 0-512,在扇区 1 上写入 0-15。第二条记录在扇区 1 上写入 16-512,在扇区 2 上写入 0-31。第三条记录在扇区 2 上写入 32-512,并且第 3 扇区的 0-47。ETC。

因此,我所做的是将要修改的两个扇区读入 2 个新分配的缓冲区,从记录开始复制到 buf1+计算出的 512 个偏移字节的偏移量。这在两台机器上都能正常工作。

但是,第二个 memcpy 失败了。具体来说,以下代码段错误中的“record+DISK_SECTOR_SIZE-offset”,但仅在 linux 机器上。运行一些随机测试,它变得更加好奇。linux 机器报告 sizeof(Record) 为 528。因此,如果我尝试将 record+500 的 memcpy 转换为 buf 1 个字节,它应该没有问题。

事实上,我可以从记录中获得的最大偏移量是 254。也就是说,memcpy(buf1, record+254, 1) 有效,但是 memcpy(buf1, record+255, 1) 段错误。

有谁知道我错过了什么?

0 投票
12 回答
85586 浏览

c - memcpy(),size参数的值应该是多少?

我想将一个int数组复制到另一个int数组。它们对长度使用相同的定义,因此它们将始终具有相同的长度。

以下两种尺寸参数替代方案的优缺点是memcpy()什么?

或者

第二个选项总是有效吗?不看内容?

有利于最后一个的一件事是,如果数组要更改,更新memcpy()'s.

0 投票
5 回答
24283 浏览

c++ - c++ memcpy返回值

根据http://en.cppreference.com/w/cpp/string/byte/memcpy,c++采用memcpy三个参数:目标、源和大小/字节。它还返回一个指针。为什么呢?参数不足以输入和复制数据。

还是我误解了什么?示例不使用返回值