浅聊内存重叠



内存重叠:拷贝的目标地址在源地址范围内,即拷贝的目标地址和源地址有重叠。

就一个例子来进行展开:

现有一整型数组arr[10] = {1,2,3,4,5,6,7,8,9,10},要求将其拷贝到整形数组brr[10]当中去,这是很简单的,类似于字符串的拷贝,但是同时又与之有区别。如果现在我们选择将从arr[4]开始将6个元素拷贝到从arr[0]开始的位置,这样将会出现怎样的结果呢?再有,选择将从arr[0]开始的6个元素拷贝到从arr[4]开始的位置,又该怎样呢?这两个问题就引出了“内存重叠”的话题了。

  从第一个问题开始分析。

我们可以看到,中间的arr[4]arr[5]是重叠部分,这时的拷贝方式是从前往后拷贝的,与字符串的拷贝方式并没有多大差别,可是,再想想,如果从arr[9]开始从后往前拷贝呢?那么这时,arr[4]arr[5]arr[8]arr[9]覆盖,那么arr[4]arr[5]的数据被覆盖了,显然得到的结果就不是我们想要的了。

正确结果(标红的地方)及图如下(图中的数字表示的是下标)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值