jjzjj

c++ - C++ 中的 __builtin__functions 有什么用?

我正在调试一个对性能敏感的事务处理系统。我找到了一个使用__builtin_memcpy和__builtin_memset而不是memcpy和memset的代码。__builtin_functions有什么用?,以防止对体系结构或编译器的依赖性问题?或者..__builtin_functions更受欢迎是否有任何性能原因?谢谢你:D 最佳答案 传统的库函数,标准的memcpy只是对一个函数的调用。不幸的是,memcpy通常会为每个小拷贝调用,调用函数、打乱几个字节并返回的开销是相当大的开销(特别是因为memcpy添加了在函数的开头添

c++ - 用相同类型的对象覆盖对象

下面的定义是否明确?#include#includeusingnamespacestd;structConst{constinti;Const(inti):i(i){}intget0(){return0;}//bestaccessorever!};intmain(){Const*q,*p=newConst(1);new(p)Const(2);memcpy(&q,&p,sizeofp);couti;return0;}请注意,在构造第二个Const之后,p并没有在语义上(故意?)指向新对象,并且第一个已经消失,所以它是可用的"作为void*”。但是第二个对象是在完全相同的地址构造的,因此p

c++ - 复制一些大于 dst 的内容时,memcpy() 是否安全?

request_token.size()大于LEN是否安全?chardst[LEN];memcpy(dst,request_token.c_str(),request_token.size()); 最佳答案 不,这不安全;你会导致缓冲区溢出。原因是,除了您在第三个参数中传递的大小,memcpy无法知道您的目标缓冲区的大小。 关于c++-复制一些大于dst的内容时,memcpy()是否安全?,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 如何使用 memcpy 将数据从两个整数复制到字符数组?

我有一个文件,最多可以存储8个字节的数据。我有一个系统(我们称之为Sys1),它可以从文件中取出8个字节并将其保存在ram内的缓冲区中。我可以使用这8个字节并在其中复制一些内容,然后使用该系统说“好的,我完成了,只需将这些数据发送回文件即可”。我想将8个字节放入缓冲区,向其中复制一个整数,这需要4个字节,然后在剩余的4个字节上复制另一个整数。我只想要两个8字节的整数,我相信这是可以做到的。我设法只复制了4个字节,也就是1个整数,并设法将其发送回文件。所以我有这样的东西:char*data;sys1.bring_the_8_bytes(&data);//nowthe8bytesarein

c++ - 如何将 unsigned int 放入 char 数组并将其提取回来

有人可以解释为什么这不起作用吗?我正在尝试将一个unsignedint放入一个char缓冲区,然后将其取回另一个unsignedint。1#include2#include3intmain(){4unsignedinttester=320;5charbuffer[512];6memset(buffer,0,512);7memcpy(buffer,&tester,sizeof(unsignedint));8/*buffer[0]|=tester;9buffer[1]|=(tester>>8);10buffer[2]|=(tester>>16);11buffer[3]|=(tester>>

c++ - 使用 memcpy 复制数组的一部分,以及其他内存操作工具

是否可以使用memcpy复制数组的一部分?例如,我们有一个包含10个整数的数组。我们可以创建一个新数组,并将最后5个整数复制到其中吗?是否有其他可用于c/c++的内存/数组复制/操作工具? 最佳答案 Isitpossibletousememcpytocopypartofanarray?不,一般情况下是不可能的。只有当数组中元素的类型是普通布局时,您才能这样做。Sayforexamplewehaveanarrayof10integers.Canwecreateanewarray,andcopythelast5integersintoi

c++ - 将整数复制到缓冲区 memcpy C++

基本上我想将指针的地址存储在缓冲区中。不要问我为什么char*buff="myBuff";char*myData=(char*)malloc(sizeof(char*));intaddressOfArgTwo=(unsignedint)buff;memcpy(myData,&addressOfArgTwo,sizeof(char*));cout我不明白为什么上面的代码不起作用。它输出:IntVal:4472832Addressinbuffer:0当Buffer中的IntVal和Address应该相同时。谢谢 最佳答案 您取消引用一个

c++ - unsigned char 数组到 unsigned int 通过 memcpy 返回到 unsigned char 数组被反转

这不是跨平台代码...所有内容都在同一平台上执行(即字节序是相同的......小字节序)。我有这个代码:unsignedchararray[4]={'t','e','s','t'};unsignedintout=((array[0]unsignedcharbuff[4];memcpy(buff,&out,sizeof(unsignedint));std::cout我希望buff的输出是“test”(由于缺少“/0”而带有垃圾尾随字符),但输出却是“tset”。显然,更改我要移动的字符的顺序(3、2、1、0而不是0、1、2、3)可以解决问题,但我不明白这个问题。memcpy是否没有按我预

c++ - 为什么memcpy复制Eigen矩阵数据失败,std::copy成功?

当我使用Eigen创建矩阵时,如下所示:Eigen::MatrixXdM(3,3);M产生147258369我可以用指针遍历数据,打印每个元素:double*d=M.data();for(inti=0;i产生123456789我还可以使用std::copy将其复制到堆栈上相同类型的数组,然后打印该数组的元素:doubledata_copy[9];std::copy(M.data(),M.data()+M.size(),data_copy);for(inti=0;i产生123456789但是,我似乎无法使用memcpy进行等效复制。这只能复制第一个元素:doubledata_memcop

c++ - C++ 中的 memcpy 等价物是什么

在C++中将memcpy用于缓冲区或字符串有什么等价物?例如:charmessage_buffer[32];uint16_tn=457u;memcpy(message_buffer,&n,sizeof(n));...类似于:std::stringmessage_buffer;uint16_tn=457u;std::copy(messagebuffer,n);没有C++等价物吗?我是否只是坚持使用memcpy,而不是使用std::string?std::stringmessage_buffer;message_buffer.resize(32);uint16_tn=457u;memcpy