内存移动:memmove原理模拟实现
2017-10-06 17:32
253 查看
【移动内存】 阅读下列程序说明和C代码,在下划线“__”处填入语句。
【程序说明】子程序Move是将地址为A开始的N个存储单元 移动到地址为B开始的N个存储单元中,对于两个区域重叠的情况也能正确处理。
【温馨提示】分为三种情况考虑,一种相等不处理,一种是顺序操作肯定不会重叠,最后一种…;后面两种需要调用Save函数,该函数已经编写完成。
【图解分析】
【分析结果】
【总结】
【程序说明】子程序Move是将地址为A开始的N个存储单元 移动到地址为B开始的N个存储单元中,对于两个区域重叠的情况也能正确处理。
【温馨提示】分为三种情况考虑,一种相等不处理,一种是顺序操作肯定不会重叠,最后一种…;后面两种需要调用Save函数,该函数已经编写完成。
#define MAX 100 /* 总共在100个数据中处理 */ #define N 10 /* 两个存储单元长度为10个单位 */ int *A, *B; void Save(int *a, int *b, int Step) { for (int i = 0; i < N; i++) { *b = *a; a += Step; b += Step; } } void Move() { int *a, *b, Step; a = A; b = B; if (a == b) { return; } else if (_____) { __________; __________; __________; } else { __________; } Save(a, b, Step); } int main(void) { int i, Array[MAX]; random(); /* 初始化随机数因子,random(int X)返回不小于0, 不大于X的随机整数 */ A = &Array[random(MAX - N)]; B = &Array[random(MAX - N)]; for (i = 0; i < 4000 ; N; i++) A[i] = i; Move(); return 0; }
【图解分析】
//TODO: 1、Save函数功能分析 2、三种情况分析
【分析结果】
if (a == b) { return; } else if ((a - b < 0) && (a - b > -N)) { a += N-1; b += N-1; Step = -1; } else { Step = 1; }
【总结】
//TODO:
相关文章推荐
- 模拟实现内存操作函数memcpy、memmove
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- [置顶] 实现内存的移动,功能类似于memmove,可以不实现内存重叠拷贝,不使用任何库函数
- c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
- 运用指针模拟实现一些代码以及memcpy函数与memmove函数的区别
- C++动态内存分配---allocator类的原理与实现(一)
- JAVA学习笔记38——模拟实现Iterator+HashMap的“分拣”原理+“分拣”的应用
- HDB V1.0.0 内存数据引擎Win平台测试数据_模拟移动电信话费计费功能
- 菜鸟学SSH(十五)——简单模拟Hibernate实现原理
- 模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)
- 复制内存-实现memmove()
- 多态实现原理-虚函数表内存分析及虚基类表的内存分析
- 自定义View很简单 - Android翻页效果原理实现之模拟扭曲
- string库之模拟实现memcpy与memmove
- 基于Android移动平台僵尸网络模拟工具设计与实现
- linux下的多进程通信(IPC)原理及实现方案(管道、队列、信号量、共享内存)
- Android翻页效果原理实现之模拟扭曲
- javascript调试原理(二) ---模拟实现 (转)
- 模拟实现mymcpy,memmove,strncpy
- Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)