zoukankan      html  css  js  c++  java
  • 深入理解计算机系统:数组储存

    首先我们要知道,数组的元素储存的地址是连续的。

    一维数组很好理解,接下来看看二维数组的空间分布:

    对于上面这个例子, 我们可以将A看成具有五个元素,且每个元素都是3个int长度的一维数组存储。

    分析例子

    int main(){
        int a[5];
        int i,sum;
        for(i = 0 ; i < 5; i++){
            a[i] = i * 3;
        }
        for(i = 0 ; i < 5; i++){
            sum += a[i];
        }
        return sum;
    }

    翻译成汇编:

    main:
        pushl    %ebp
        movl    %esp, %ebp//到此准备好栈帧
        subl    $32, %esp//分配32个字节的空间
        leal    -20(%ebp), %edx//将帧指针减去20赋给%edx寄存器
        movl    $0, %eax//将%eax设置为0,这里的%eax寄存器是重点
    .L2:
        movl    %eax, (%edx)//将0放入帧指针减去20的位置?
        addl    $3, %eax//第一次循环时,%eax为3,对于i来说,%eax=(i+1)*3。
        addl    $4, %edx//将%edx加上4,第一次循环%edx指向帧指针-16的位置
        cmpl    $15, %eax//比较%eax和15?
        jne    .L2//如果不相等的话就回到L2
        movl    -20(%ebp), %eax//下面这五句指令已经出卖了leal指令,很明显从-20到-4,就是数组五个元素存放的地方。下面的就不解释了,直接依次相加然后返回结果。
        addl    -16(%ebp), %eax
        addl    -12(%ebp), %eax
        addl    -8(%ebp), %eax
        addl    -4(%ebp), %eax
        leave
        ret
    最好的开始时间是以前,其次是现在。
  • 相关阅读:
    Hibernate中的HQL
    hibernate配置数据库连接池三种用法
    Hibernate的延迟检索和立即检索
    Hibernate关系映射中的注解
    Hibernate的多种关系映射(oto、otm、mtm)
    自然主键和代理主键的区别
    Hibernate的xml方法配置和操作代码
    Hibernate简介
    VirtualBox从USB设备(PE)启动图文教程
    属性动画
  • 原文地址:https://www.cnblogs.com/dragonsbug/p/13626999.html
Copyright © 2011-2022 走看看