c++笔记(class12.6)大神必修,理解数组和指针

目录

编译器和数组

引用的本质:

堆和栈:

编译器和数组

补充:当要访问a[3]这个数组元素,编译器要将其编译成汇编代码,通过a的地址偏移(a的地址和a[0]地址一样),偏移3*int

注意看:上面的代码,sizeof(a)直接被编译器【编译】成14h,那么实际运行的时候并不存在,而且只要是cxx的编译器都可以在编译阶段完成这个任务。

那么,sizeof并不是一个函数,因为函数他是在运行的时候会动态的执行,

看这两段代码:

memcpy(Ptr, a, 5 * sizeof(int));

 memcpy(Ptr, a, 5 * 4)

执行效率是一样的。

引用的本质:

 

①mov          eax,dword   ptr    [esi]

 dword表示的是双字,四字节。esi中保存的是为内存中的地址。将该地址处的4字节数据传送到eax中。

 ② lea       eax,[ebp-0Ch]

把ebp-0Ch作为地址存入eax

堆和栈:

 

动态申请的都在堆,静态申请的都在栈。

栈在编译的时候就已经确定了一段大小的内存,是连续的。栈的内存容量有限,但是可以进行调整大小

 为什么不能像数组那样地址连续放置数据呢?

 

 

通过查看变量的内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值