如何帮人做网站,做网络推广工作怎么样,wordpress 主页面错乱,做个企业网站大概多少费用系列文章 
: 深入理解计算机系统笔记  文章目录 系列文章3.7 过程3.7.1 运行时栈3.7.2 转移控制3.7.3 数据传送3.7.4 栈上的局部存储3.7.5 寄存器中的局部存储空间3.7.6 递归过程 3.8 数组分配和访问3.8.1 基本原则3.8.2 指针运算3.8.3 嵌套的数组3.8.4 定长数组3.8.5 变长数组…系列文章 
: 深入理解计算机系统笔记  文章目录 系列文章3.7 过程3.7.1 运行时栈3.7.2 转移控制3.7.3 数据传送3.7.4 栈上的局部存储3.7.5 寄存器中的局部存储空间3.7.6 递归过程 3.8 数组分配和访问3.8.1 基本原则3.8.2 指针运算3.8.3 嵌套的数组3.8.4 定长数组3.8.5 变长数组   3.7 过程 
过程是软件中一种很重要的抽象。用一组指定的参数和一个可选的返回值实现某种功能可以在程序的不同的地方调用这个函数。隐藏某个行为的具体实现。过程的形式函数function、方法method、子例程subroutine、处理函数handler等。对过程的机器级支持假设过程 P 调用过程 QQ 执行后返回 P。这些动作包括下面一个或多个机制 1. 传递控制。进入过程 Q 时程序计数器被设为 Q 代码的起始地址在返回时要将程序计数器设置为 P 中调用 Q 的后面那条指令的地址。 2. 传递数据。P 必须能够向 Q 提供一个参数Q 必须能够向 P 返回一个值。 3. 分配和释放内存。开始时Q 可能需要为局部变量分配空间而在返回前又必须释放这些存储空间。栈遵循最低要求策略只实现上述机制每个过程所必须的那些 
3.7.1 运行时栈 当Q执行时P及其上的调用链是被挂起的需要为Q的局部变量分配存储空间或设置Q到另一个的过程调用。Q返回时释放。程序用栈管理过程所需的空间栈和寄存器存放传递控制数据和分配内存的信息被放在栈尾P调用Q时参数设定后将返回地址压入栈Q扩展栈的边界大多数的栈帧是定长的有些过程需要变长的栈帧过程的栈帧是过程需要的存储空间超过寄存器存放的大小时才在栈上分配如果小于等于6个参数且不调用其他函数叶子过程的函数通常不需要栈帧 
3.7.2 转移控制 
将P转移到Q函数只需要将PC设置为Q代码的起始地址。而返回时处理器需要记录它需要继续P的继续执行的位置。call命令将地址A紧跟着call的下一条指令压入栈中将PC设置为Q代码的起始地址。可以是直接的也可以是间接的*。ret命令从栈中弹出地址A并将PC设置为A 
3.7.3 数据传送 
-** 调用一个过程时**也要将数据作为参数传递从过程返回可能包含一个返回值大部分过程间的数据传送是通过寄存器传递的。 六个寄存器传递disidxcx89一个寄存器返回ax 
如果函数传递的参数大于六个整形参数就需要栈来传递所有的数据大小向8字节的倍数对齐 第七个参数位于栈顶 
3.7.4 栈上的局部存储 
当寄存器不够存放所有的本地数据或者对一个局部变量使用地址运算符或者局部变量是数组或者结构时在栈帧上存放局部变量 
3.7.5 寄存器中的局部存储空间 
寄存器组是唯一被所有过程共享的资源在给定时刻只有一个过程是活动的必须确保当一个过程调用另一个过程时被调用者不会覆盖调用者稍后会使用的寄存器值。被调用者保存寄存器Callee-saved registers是指在函数调用过程中如果被调用的函数需要使用这些寄存器那么它必须在使用这些寄存器之前将它们的原始值保存起来通常保存在栈上在函数返回之前再恢复这些寄存器的值。这样就保证了调用者在调用函数前后这些寄存器的值保持不变。 
3.7.6 递归过程 
递归调用是函数调用自身的情况每次递归调用都会创建一个新的栈帧。即使是递归调用栈帧的分配和释放规则依然适用确保每次调用都有独立的状态信息。函数调用过程 调用者caller保存自身需要保存的寄存器值调用者保存寄存器。 调用者将参数传递给被调用者callee。 调用者执行 call 指令将返回地址压入栈。 被调用者创建新的栈帧保存被调用者保存寄存器的值。 被调用者执行函数体。函数返回过程 被调用者恢复被调用者保存寄存器的值。 被调用者销毁栈帧。 被调用者执行ret 指令跳转到返回地址。 调用者恢复调用者保存寄存器的值。第一次是被调用者 调用者继续执行。 
3.8 数组分配和访问 
3.8.1 基本原则 
C语言对于数据类型 T 和整型常数 N声明如下 T A[N]; 起始位置表示为xA地址 首先它在内存中分配一个 L⋅N 字节的连续区域L 是数据类型 T 的大小单位为字节。其次标识符 A作为指向数组开头的指针这个指针的值就是 x A。可以用0N-1 的整数索引来访问该数组元素。第i个数组元素会被存放在地址为 x AL⋅i 的地方。假设 E 是一个 int 型的数组而我们想计算 E[i]在此E 的地址存放在寄存器 %rdx 中而 i 存放在寄存器 %rcx 中 
movl (%rdx,%rcx,4),%eax3.8.2 指针运算 
C 语言允许对指针进行运算 p 是一个指向类型为 T 的数据的指针p  i 的值为 xp L⋅i这里 L 是数据类型 T 的大小。Expr 是给出该对象地址的一个指针。对于一个表示某个对象地址的表达式 AExpr*AExpr 给出该地址处的值。因此表达式 A[i] 等同于表达式 *(A  i)它计算第 i 个数组元素的地址然后访问这个内存位置。 假设整型数组 E 的起始地址和整数索引 i 分别存放在寄存器 %rdx 和 %rcx 中  
3.8.3 嵌套的数组 
int A[5][3];
//等价于
typedef int row3_t[3];
row3_t A[5];嵌套的数组在内存中也是连续的xAij分别存在%rdi%rsi%rdx中。 将A [i] [j] 复制到%eax 
leaq    (%rsi,%rsi,2), %rax       # 计算 3i
leaq    (%rdi,%rax,4), %rax       # 计算 x_A  12i
movl    (%rax,%rdx,4), %eax       # 从 M[x_A  12i  4j] 读取数据3.8.4 定长数组 
C语言编译器能优化定长多维数组O1时的一些优化 
去掉整数索引它将所有的数组引用都转换成了指针间接引用生成指针Aptr指向数组A的行i中连续的元素生成指针Bptr指向数组B的列k中连续的元素生成指针Bend当需要终止循环时它会等于Bptr的值。Bend的值是假想中B的列k的第(n1)个元素的地址由C表达式B[N][k]给出。 
例子 
/* Compute i,k of fixed matrix product */
int fix_prod_ele (fix_matrix A, fix_matrix B, long i, long k) {long j;int result  0;for (j  0; j  N; j)result  A[i][j] * B[j][k];return result;
}
//优化后
/* Compute i,k of fixed matrix product */
int fix_prod_ele_opt(fix_matrix A, fix_matrix B, long i, long k) {int *Aptr  A[i][0];   /* Points to elements in row i of A */int *Bptr  B[0][k];   /* Points to elements in column k of B */int *Bend  B[N][k];   /* Marks stopping point for Bptr */int result  0;do {result  *Aptr * *Bptr;  /* Add next product to sum */Aptr;                   /* Move Aptr to next column */Bptr  N;                /* Move Bptr to next row */} while (Bptr ! Bend);       /* Test for stopping point */return result;
}3.8.5 变长数组 
C99的变长数组允许数组的维度是一个表达式分配时才计算。由于分配时才计算所以在leap指令前需要需要一次乘法指令imul影响性能。循环访问时编译器可以优化识别步长避免直接应用乘法。 文章转载自: http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.gftnx.cn.gov.cn.gftnx.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.tgcw.cn.gov.cn.tgcw.cn http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.mtmnk.cn.gov.cn.mtmnk.cn http://www.morning.rfbq.cn.gov.cn.rfbq.cn http://www.morning.gfhng.cn.gov.cn.gfhng.cn http://www.morning.wbqt.cn.gov.cn.wbqt.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.frpfk.cn.gov.cn.frpfk.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn http://www.morning.gklxm.cn.gov.cn.gklxm.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.ygth.cn.gov.cn.ygth.cn http://www.morning.rflcy.cn.gov.cn.rflcy.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.grxsc.cn.gov.cn.grxsc.cn http://www.morning.poapal.com.gov.cn.poapal.com http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.xgchm.cn.gov.cn.xgchm.cn http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn http://www.morning.hksxq.cn.gov.cn.hksxq.cn http://www.morning.mbrbg.cn.gov.cn.mbrbg.cn http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn http://www.morning.bqwsz.cn.gov.cn.bqwsz.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.srky.cn.gov.cn.srky.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn http://www.morning.qhln.cn.gov.cn.qhln.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn http://www.morning.nlryq.cn.gov.cn.nlryq.cn http://www.morning.rptdz.cn.gov.cn.rptdz.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.kynf.cn.gov.cn.kynf.cn http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn http://www.morning.slqgl.cn.gov.cn.slqgl.cn http://www.morning.lwcqh.cn.gov.cn.lwcqh.cn http://www.morning.rjrz.cn.gov.cn.rjrz.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.nydtt.cn.gov.cn.nydtt.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.xymkm.cn.gov.cn.xymkm.cn http://www.morning.gsksm.cn.gov.cn.gsksm.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.lyhry.cn.gov.cn.lyhry.cn http://www.morning.hnrpk.cn.gov.cn.hnrpk.cn http://www.morning.glxdk.cn.gov.cn.glxdk.cn http://www.morning.zyffq.cn.gov.cn.zyffq.cn http://www.morning.gjlst.cn.gov.cn.gjlst.cn http://www.morning.knmby.cn.gov.cn.knmby.cn http://www.morning.tfwr.cn.gov.cn.tfwr.cn