memcpy内存拷贝及优化策略图解
一般内存拷贝与优化
文章图片
文章图片
代码实现
#include
【memcpy内存拷贝及优化策略图解】usingnamespace std;
//不安全的内存拷贝(当源内存地址与目标内存地址重叠时会产生错误)
void h_memcpy(void*src,void *dst,intsize){
if (src =https://www.it610.com/article/= NULL|| dst ==NULL) {
return;
}
const char *s =(char *)src;
char *d = (char*)dst;
while (size--) {
*d++ = *s++;
}
}
//内存移动(安全的内存拷贝,措施为根据源内存地址和目的内存地址不同使用不同的拷贝顺序)
void h_memmove(void*src,void *dst,intsize){
if (src =https://www.it610.com/article/= NULL|| dst ==NULL) {
return;
}
const char *s =(char *)src;
char *d = (char*)dst;
if (s > d) {
while (size--) {
*d++ = *s++;
}
}elseif(s < d){// 正向反向拷贝的目的就是为了避免未移动内存被覆盖
d = d + size -1;
s = s +size -1;
while (size--) {
*d-- = *s--;
}
}
// s == d, you should do nothing!~
}
int main(intargc,const char* argv[])
{
char s[] = "12345";
char *p1 = s;
char *p2 = s+2;
printf("%s\n",p1);
printf("%s\n",p2);
h_memcpy(p1, p2, 2);
printf("%s\n",p2);
return 0;
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- iOS内存对齐原则
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 内存管理概念与原理以及解决办法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- 内存管理
- Java内存溢出及解决
- js类型转换和内存