草庐IT

aeabi_memcpy

全部标签

c - memcpy 在 Linux 中移动 128 位

我正在Linux中为PCIe设备编写设备驱动程序。该设备驱动程序执行多次读写以测试吞吐量。当我使用memcpy时,TLP的最大负载是8字节(在64位架构上)。在我看来,获得16字节有效负载的唯一方法是使用SSE指令集。我已经看过this但代码无法编译(AT&T/Intel语法问题)。有一种方法可以在linux中使用该代码吗?有谁知道我在哪里可以找到移动128位的memcpy的实现? 最佳答案 首先,您可能使用GCC作为编译器,它使用asm语句作为内联汇编程序。使用它时,您必须为汇编代码使用字符串文字(在发送到汇编程序之前将其复制到汇

c - 如何在linux内核的memcpy函数中添加一个hook?

以下是我的步骤,但没有按预期工作。linux-3.16-rc2\arch\x86\lib\memcpy_64.S:改变了ENTRY(__memcpy)ENTRY(memcpy)...CFI_ENDPROCENDPROC(memcpy)ENDPROC(__memcpy)到:ENTRY(__memcpy)ENTRY(x86_memcpy)...CFI_ENDPROCENDPROC(x86_memcpy)ENDPROC(__memcpy)linux-3.16-rc2\lib\string.c:改变了#ifndef__HAVE_ARCH_MEMCPYvoid*memcpy(void*dest,

c - 在 gcc 中初始化数组,未定义对 `memcpy' 的引用

我在Nachos3.4、Centos6.0中编写C,通过gcc2.95.3编译,我使用的命令行是gmakeall当我编译这个时,一切都很好intmain(){char*fname[]={"c(0)","c(1)","c(2)","c(3)","c(4)","c(5)","c(6)","c(7)"};return0;}但是当我这样做时,它说undefinedreferenceto'memcpy'intmain(){char*fname[]={"c(0)","c(1)","c(2)","c(3)","c(4)","c(5)","c(6)","c(7)","c(8)"};return0;}问

linux - memcpy memmove GLIBC_2.14/2.2.5的解释

我的问题源于一个共享库,我没有选择重新编译该库。错误声明undefinedreferencetomemcpy@GLIBC_2.14。我机器上的GLIBC版本是2.12。我看到人们使用这条线在线完成了修复__asm__(".symvermemcpy,memcpy@GLIBC_2.2.5");我所做的修复是使用十六进制编辑器将2.14的引用更改为GLIBC_2.2.5。执行命令readelf-Vlib_name.so时,输出更改为:0x0060Name:GLIBC_2.14Flags:noneVersion6......0x0080Name:GLIBC_2.2.5Flags:noneVer

c++ - 'memcpy' 未在此范围内定义

我收到一个“memcpyisnotdefinedinthisscopeerror”,代码如下:CommonSessionMessage::CommonSessionMessage(constchar*data,intsize):m_data(newchar[size]){memcpy(m_data.get(),data,size);}我浏览了这个网站和谷歌,但找不到能为我解决问题的解决方案。如有任何帮助,我们将不胜感激。谢谢。 最佳答案 您是否在代码文件的开头包含了string.h/cstring(或包含它的其他header)?

我可以在 Linux 中执行写时复制 memcpy 吗?

我有一些代码,我经常在其中复制一大块内存,通常只对其进行非常小的更改。我已经实现了一个跟踪更改的系统,但我认为这可能会很好,如果可能的话告诉操作系统对内存进行“写时复制”,让它只处理制作副本那些改变的部分。然而,虽然Linux会进行写时复制,例如当fork()ing时,我无法找到一种方法来控制它并自己完成。 最佳答案 你最好的机会可能是mmap()原始数据到文件,然后mmap()再次使用MAP_PRIVATE相同的文件. 关于我可以在Linux中执行写时复制memcpy吗?,我们在Sta

c++ - 函数参数太少 ‘memcpy’

这个问题不太可能帮助任何future的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我的理解是memcpy必须有3个参数:void*memcpy(void*destination,constvoid*source,size_tnum);所以我正在尝试这段代码://char*tmpPtrisapointerthatpointstosomedatacharframeBuffer[921600];//destinationstartingagiveni

windows - 32 位和 64 位进程之间的 memcpy 性能差异

我们有配备XP64的Core2机器(DellT5400)。我们观察到,在运行32位进程时,memcpy的性能大约为1.2GByte/s;但是memcpy在64位进程中达到约2.2GByte/s(或2.4GByte/s与英特尔编译器CRT的memcpy)。虽然最初的react可能只是解释这一点由于可用的寄存器更广泛在64位代码中,我们观察到我们自己的类似memcpySSE汇编代码(应使用128位宽负载存储,无论32/64位该过程)展示了类似的上限它实现的复制带宽。我的问题是,这实际上有什么区别由于?32位进程是否必须跳过一些额外的WOW64箍来获取内存?是不是什么东西与TLB或预取器有关

performance - 为什么 memcpy() 的速度每 4KB 就会急剧下降?

我测试了memcpy()的速度注意到速度在i*4KB处急剧下降。结果如下:Y轴是速度(MB/秒),X轴是memcpy()的缓冲区大小。,从1KB增加到2MB。子图2和子图3详细说明了1KB-150KB和1KB-32KB的部分。环境:CPU:Intel(R)Xeon(R)CPUE5620@2.40GHz操作系统:2.6.35-22-generic#33-UbuntuGCC编译器标志:-O3-msse4-DINTEL_SSE4-Wall-std=c99我想它一定与缓存有关,但我无法从以下缓存不友好的情况中找到原因:Whyismyprogramslowwhenloopingoverexact

c++ - 提高 mmap memcpy 文件读取性能

我有一个从文件中顺序读取数据的应用程序。有些是直接从指向mmaped文件的指针读取的,而其他部分是从文件memcpyed到另一个缓冲区的。我注意到在我需要的所有内存(1MBblock)中执行较大的memcpy时性能很差,而在执行大量较小的memcpy调用时性能更好(在我的测试中,我使用了4KB的页面大小,运行了1/3的时间。)我认为问题是使用大型memcpy时出现大量重大页面错误。我尝试了各种调整参数(MAP_POPUATE、MADV_WILLNEED、MADV_SEQUENTIAL),但没有任何明显改善。我不确定为什么许多小的memcpy调用应该更快;这似乎违反直觉。有什么办法可以改