草庐IT

aeabi_memcpy

全部标签

c++ - std::vector<uint8_t> 在启用 C++11/14 时手动复制而不是调用 memcpy

使用gcc4.9,使用Linaro工具链交叉编译ARM,我找到了vector.assign()的编译结果添加-std=c++14时的变化,在某种程度上会产生严重的性能问题。我已经尝试了几种不同的方法来进行这种分配+复制,但是只要我使用std::vector,它们都会有这个性能问题。去做吧。我可以用这个玩具示例重现问题:VectorTest.h#include#include#includestructVectorWrapper_t{VectorWrapper_t(uint8_tconst*pData,size_tlength);std::vectordata;};VectorTest.

c++ - C 别名规则和 memcpy

在回答另一个问题时,我想到了以下示例:void*p;unsignedx=17;assert(sizeof(void*)>=sizeof(unsigned));*(unsigned*)&p=17;//(1)memcpy(&p,&x,sizeof(x));//(2)第1行打破了别名规则。但是,第2行是可以的。别名规则。问题是:为什么?编译器是否有关于memcpy等函数的特殊内置知识,或者是否有其他一些规则可以使memcpy正常?有没有办法在标准C中实现类似memcpy的函数而不破坏别名规则? 最佳答案 C标准对此非常清楚。p命名的对象的

C++ memcpy从双数组到 float 组

是否可以安全地从双数组存储到float组? 最佳答案 取决于你想要什么。这些值肯定不会被保留。如果需要,请使用std::copy。#includeintmain(){doublea[]={1.618,3.1416,2.7,0.707,1.0};floatb[5];std::copy(a,a+5,b);} 关于C++memcpy从双数组到float组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - 为什么 MSVC 会优化掉这个 memcpy 调用?

我有以下C代码(我将其缩短了一些其他调用和检查):#include#includeexterncharbuffer[];externvoidgetstr1(char*buff,intbuflen);externvoidgetstr2(char**s);externvoiddosomething(char*s);voidmyfn(){char*s,*s1;intlen;getstr1(buffer,128);getstr2(&s);len=*s+*buffer;memcpy(buffer+*buffer+1,s+1,(*s)*sizeof(char));*buffer=len;dosom

类 POD 数据的 C++ 保证和名称,支持 memcpy

在另一个question我错误地使用术语POD来指代实际上不是POD类型的数据类型(因为有构造函数)。现在,我浏览了标准,找不到我想要的合适名称。我也找不到真正允许复制的保证。我指的数据类型是POD,但可能包含函数,包括构造函数,但与等效的POD类型相比,不会改变其对齐或大小特征。在标准的第3.9节中,它声明可以使用memcpy将POD数据复制到另一个对象,或者复制到字符数据并返回。从未对非POD数据做出此类保证。然而,对象的对象表示是在同一节中定义的。它的定义让人相信任何两个相同类型的对象都可以通过memcpy安全地复制。所以我的问题是:实际上是否可以保证带有memcpy的拷贝对于此

c++ - 'memcpy' 未在此范围内声明

我正在尝试使用gcc和eclipse构建一个开源c++库。但我得到这个错误'memcpy'未在此范围内声明我尝试包含memory.h(和string.h),如果我单击“打开声明”,eclipse会找到该函数,但gcc给我错误。我该怎么办?#include#includenamespacerosic{//etcetctemplatevoidcircularShift(T*buffer,intlength,intnumPositions){intna=abs(numPositions);while(na>length)na-=length;T*tmp=newT[na];if(numPosi

c++ - memcpy/memmove 到 union 成员,这是否设置了 'active' 成员?

重要的澄清:一些评论者似乎认为我是从union复制的。仔细查看memcpy,它从一个普通的旧uint32_t地址复制而来,该地址不包含在union中。另外,我正在(通过memcpy)复制到union的特定成员(u.a16或&u.x_in_a_union,而不是直接复制到整个union本身(&u)C++对union非常严格-只有当该成员是最后写入的成员时,您才应该从该成员中读取:9.5Unions[class.union][[c++11]]Inaunion,atmostoneofthenon-staticdatamemberscanbeactiveatanytime,thatis,the

c++ - 什么时候允许对 c++11 中的类型进行 memcpyed?

我的问题如下:如果我想复制一个类类型,memcpy可以很快完成。这在某些情况下是允许的。我们有一些类型特征:is_standard_layout。is_trivially_copyable。我想知道的是当类型“可按位复制”时的确切要求。我的结论是,如果is_trivally_copyable和is_standard_layout特征都为真,则类型是可按位复制的:这正是我需要按位复制的吗?是否过度约束?是否受到约束?P.S.:当然,memcpy的结果一定是正确的。我知道我可以在任何情况下进行memcpy,但不正确。 最佳答案 您可以使

c++ - 强制 GCC 执行 memcpy 运行时大小检查的循环取消切换?

是否有任何可靠的方法可以强制GCC(或任何编译器)在memcpy()中排除运行时大小检查在循环之外(该大小不是编译时常量,而是该循环内的常量),为每个相关的大小范围专门循环,而不是反复检查其中的大小?这是一个从性能回归报告中简化的测试用例here用于对大型数据集进行高效内存分析的开源库。(回归恰好是因为我的一个提交......)原始代码在Cython中,但我已将其简化为纯C代理,如下所示:voidtake(double*out,double*in,intstride_out_0,intstride_out_1,intstride_in_0,intstride_in_1,int*inde

c++ - 在什么情况下我应该在 C++ 中使用 memcpy 而不是标准运算符?

我什么时候可以使用memcpy获得更好的性能,或者我如何从使用它中受益?例如:floata[3];floatb[3];是代码:memcpy(a,b,3*sizeof(float));比这个更快?a[0]=b[0];a[1]=b[1];a[2]=b[2]; 最佳答案 效率不应该是您关心的问题。编写干净的可维护代码。这么多答案表明memcpy()效率低下,这让我很困扰。它被设计成最有效的内存块复制方式(用于C程序)。所以我写了以下内容作为测试:#includeexternfloata[3];externfloatb[3];externv