美文网首页iOS 开发
数组在内存中的存储

数组在内存中的存储

作者: 指尖猿 | 来源:发表于2016-08-01 11:36 被阅读135次

    int a[10];

    首先每个int占4个字节,所有要为局部变量a申请40个字节的栈空间,要申请栈空间,就是把SP(栈指针)的值减去40,然后a就是指向(SP-40)的指针,a[0]的地址就是(SP-40),a[1]的地址就是(SP-36),a[2]的地址就是(SP-32),以此类推。当然这些地址的计算工作都是编译器在背后帮我们算好了,并存放在exe或dll文件里了。char i,a【10】也是一样的原理。

    如果这样还是不明白的话,你可以在调试进断点的时候,右键源代码,选中“Go To Disassembly”进入汇编调试页。你可以看到,每个函数开始的时候都是有这几行:

    push ebp //保存源指针的值,这里不用管它

    mov ebp,esp //把栈指针的值赋值给ebp,在这个函数里面,都是通过这个ebp减去某个数值来操作局部变量的。

    sub esp, D0h //这个函数要里总共要用到的栈空间,就是这句话申请的它的意思是"esp=esp-D0h".

    int a[10];a[1]=1;

    的汇编代码就是

    mov dwordptr[ebp-28h],1

    ebp就是原来的栈指针的值。

    相关文章

      网友评论

        本文标题:数组在内存中的存储

        本文链接:https://www.haomeiwen.com/subject/ltvxsttx.html