memcpy函数

memcpy函数的实现

被刻印的时光 ゝ 提交于 2019-11-30 04:28:41
1.按1个字节拷贝 (1)不要直接使用形参,要转换成char* (2)目标地址要实现保存 (3)要考虑源和目标内存重叠的情况 void * mymemcpy(void *dest, const void *src, size_t count) { if (dest == NULL || src == NULL) return NULL; char *pdest = static_cast <char*>(dest); const char *psrc = static_cast <const char*>(psrc); int n = count; if (pdest > psrc && pdest < psrc+count) { for (size_t i=n-1; i != -1; --i) { pdest[i] = psrc[i]; } } else { for (size_t i= 0; i < n; i++) { pdest[i] = psrc[i]; } } return dest; } 2.按4个字节拷贝 (1)转成int*,按照每次4个字节来拷贝,不足四个字节的按一个字节拷贝 void *mymemcpy(void *dst,const void *src,size_t num) { assert((dst!=NULL)&&(src!=NULL)); int

kfifo

只愿长相守 提交于 2019-11-28 04:13:10
kfifo 的一些伪代码 kfifo_len() out = LOAD fifo->out smp_rmb() len = LOAD fifo->in - out kfifo_in() kfifo_out() kfifo_len() kfifo_len() smp_mb() smp_rmb() off = LOAD fifo->in + off off = LOAD fifo->out + off /* memcpy */ /* memcpy */ smp_wmb() smp_mb() STORE fifo->in += off STORE fifo->out += off kfifo_in 只修改 fifo->in 的值,含一个 STORE 指令,及若干 fifo->out fifo->in 的 LOAD 指令 kfifo_out 相反,只修改 kfifo->out 的值,同样含一个 STORE 指令及若干 LOAD 指令 把代码中的内存屏障去掉 kfifo_len() out = LOAD fifo->out /* smp_rmb() */ len = LOAD fifo->in - out kfifo_in() kfifo_out() kfifo_len() kfifo_len() /* smp_mb() */ /* smp_rmb() */ off = LOAD fifo-

洛谷P5158 【模板】多项式快速插值

橙三吉。 提交于 2019-11-26 20:44:12
https://www.luogu.org/problemnew/show/P5158 题解: https://www.cnblogs.com/zzqsblog/p/7923192.html 备份 版本1:基于 版本1 1 #prag\ 2 ma GCC optimize(2) 3 #include<cstdio> 4 #include<algorithm> 5 #include<cstring> 6 #include<vector> 7 #include<cmath> 8 using namespace std; 9 #define fi first 10 #define se second 11 #define mp make_pair 12 #define pb push_back 13 typedef long long ll; 14 typedef unsigned long long ull; 15 const int md=998244353; 16 const int N=262144; 17 #define delto(a,b) ((a)-=(b),((a)<0)&&((a)+=md)) 18 inline int del(int a,int b) 19 { 20 a-=b; 21 return a<0?a+md:a; 22 } 23 int rev[N]; 24

C语言 - 库函数memcpy、memmove、memset、memchr、memcmp

北城余情 提交于 2019-11-26 06:07:54
本文来源于网路,感谢网友分享 文章参考: https://www.cnblogs.com/kuihuayou/p/7307447.html memcpy、memmove、memset、memchr、memcmp 都是C语言中的库函数,在头文件 string.h 中。 memcpy和memmove的作用是拷贝一定长度的内存的内容, memset用于缓冲区的填充工作, memchr用于字符的查找工作, memcmp用于比较内存中缓冲区的大小。 1.void * memcpy ( void * dest, const void * src, size_t num ); 功能:将以src作为起始地址的数据复制num个字节到以dest为起始地址的数据中,不支持dest和src重叠的情况。函数返回dest指针。 2.void * memset ( void * ptr, int value, size_t num ); 功能:将以ptr作为起始地址的数据的num个字节设置为value。函数返回destination指针 。 3.void * memmove ( void * dest, const void * source, size_t num ); 功能:功能:将以source作为起始地址的数据的num个字节移动到以destination为起始地址的数据中,支持dest和src重叠的情况

Socket封装之聊天程序(二)

▼魔方 西西 提交于 2019-11-26 03:57:55
  今天,学习一下socket的封装。 类图   首先,我们把需要封装的各个类初步的设计如下:   接下来,我们建立类与类之间的关系:   其中,CStream类可有可无,这个类是用来封装各种读写流的。 socket封装 stream类 stream.h: class CStream { public: CStream(int fd = -1); ~CStream(); void SetFd(int fd); int GetFd(); int Read(char *buf, int count); //阻塞读 int Read(char *buf, int count, int sec); //超时读 // int Read(char *buf, int count, CAddress &addr); //UDP读 bool Write(char *buf,int count); //普通写 private: int m_fd; }; stream.cpp: include "stream.h" CStream::CStream( int fd /*= -1*/ ) { this->m_fd = fd; } CStream::~CStream() { } void CStream::SetFd( int fd ) { this->m_fd = fd; } int CStream: