问题标签 [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++ - memmove、memcpy 和 new
我正在制作一个简单的字节缓冲区,它将其数据存储在使用 new 获取的 char 数组中,我只是想知道如果 memcpy 和 memmove 函数用于使用 new 获取的内存是否会给我带来任何奇怪的东西,或者有什么你会推荐做的?
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...
memcpy - 使用 memcpy 将 jnz 更改为 jmp
没有太多使用 memcpy,但这是我的代码不起作用。
(enginebase+0x74C9D) 是指向我要修补的字节地址的指针位置。
(void *)0xEB 是我想要的那种 jmp 的操作码。
唯一的问题是,这会在线路尝试运行的那一刻崩溃,我不知道我做错了什么,有什么煽动吗?
memcpy - ReadProcessMemory 到 memcpy 的转换。需要帮忙
我在用着:
将一段内存存储到一个字节数组中,但我意识到这很草率,因为我在同一个地址空间中,但我不知道如何用 memcpy 做同样的事情。
c - C 中的原始数据类型,用于表示 CPU-arch 的 WORD 大小
我观察到 long 的大小总是等于任何给定 CPU 架构的 WORD 大小。对所有架构都适用吗?我正在寻找一种可移植的方式来表示 C 中的 WORD 大小的变量。
c++ - MemSet & MemCopy
我正在编写一个内存分配器,我需要一种将整数存储在一块内存中的方法。这个整数将表示块的大小,因此我可以在给出指向开头的指针的情况下导航到结尾。
这是我的测试示例:
// 编辑:为 testInt 声明空间 int* testInt = new int;
这会在倒数第二行引发分段错误。
我想做的事情有意义吗?
如果是这样,正确的方法是什么?
非常感谢大家的帮助!!问题解决了 :-)
c++-cli - 使用 memcpy 复制托管结构
我在混合模式下工作(在一个程序集中管理 C++ 和 C++)。我处于这样的情况。
然后我调用下面给出的“方法”并将其传递给“& managedStructure”
我对这种情况有以下疑问。
1)像这样使用memcpy安全吗?如果不是,实现相同功能的替代方法是什么?(我不能改变“方法”的定义)
2)我没有释放任何内存,因为这两个结构都是托管的。好吗?
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) 段错误。
有谁知道我错过了什么?
c - memcpy(),size参数的值应该是多少?
我想将一个int
数组复制到另一个int
数组。它们对长度使用相同的定义,因此它们将始终具有相同的长度。
以下两种尺寸参数替代方案的优缺点是memcpy()
什么?
或者
第二个选项总是有效吗?不看内容?
有利于最后一个的一件事是,如果数组要更改,更新memcpy()
's.
c++ - c++ memcpy返回值
根据http://en.cppreference.com/w/cpp/string/byte/memcpy,c++采用memcpy
三个参数:目标、源和大小/字节。它还返回一个指针。为什么呢?参数不足以输入和复制数据。
还是我误解了什么?示例不使用返回值