2012年12月2日
摘要: 活动记录 一个过程的一次执行所需信息的管理,是通过使用一个所谓活动记录的连续存储块来实现的。在PASCAL和C语言中,我们通常采用以过程为单位的动态存储分配方案。即:当一个过程被调用时,就把它的活动记录推入运行时存储栈的栈顶,而在控制返回调用程序时,再从栈顶弹出相应的活动记录。活动记录中各种域的作用 如下: (1) 临时变量域——用来存放目标程序临时变量的值,如计算表达式时所产生的结果; (2) 局部数据域——用来存放过程本次执行中的局部数据、简单变量以及数组内情向量等; (3) 机器状态域——用来保存在调用一个过程之前有关机器状态的信息,其中包括各种寄存器的当前值和返回地址等; ... 阅读全文
posted @ 2012-12-02 21:38 Daniel.G 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 数调用约定的含义 当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。函数调用约定的几种类型 __stdcall,__cdecl,__fastcall,__thiscall,__nakedcall,__pascal函数调用约定的主要约束事件一、参数传递顺序 1.从右到左依次入栈:__stdcall,__cdecl,__thiscall 2.从左到右依次入栈:__pascal,__fastcall二、调用堆栈清理 1.调用者清除栈。 2.被调用函数返回后清除栈。三、函数调用约定的使用 ... 阅读全文
posted @ 2012-12-02 21:30 Daniel.G 阅读(184) 评论(0) 推荐(0) 编辑
摘要: *struct中的每个域在内存中都独立分配空间 *union只分配最大域的空间,所有域共享这个空间#include <stdio.h>struct A{ int a; int b; int c;};union B{ int a; int b; int c;};int main(){ printf("%d\n", sizeof(struct A)); //12 printf("%d\n", sizeof(union B)); //4 return 0;}union的使用受系统大小端的影响union C{ int i; ... 阅读全文
posted @ 2012-12-02 18:54 Daniel.G 阅读(800) 评论(0) 推荐(1) 编辑
摘要: 柔性数组* 柔性数组即数组大小待定的数组* C语言中结构体的最后一个元素可以是大小未知的数组* C语言中可以由结构体产生柔性数组#include <stdio.h>#include <malloc.h>typedef struct _soft_array{ int len; int array[];}SoftArray;int main(){ int i = 0; SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10); sa->len = 10; ... 阅读全文
posted @ 2012-12-02 18:23 Daniel.G 阅读(6905) 评论(1) 推荐(2) 编辑
摘要: 程序中的顺序点* 程序中存在一定的顺序点* 顺序点指的是执行过程中修改变量值的最晚时刻* 在程序达到顺序点的时候,之前所做的一切操作必须反映到后续的访问中c语言中的顺序点1 每个完整表达式结束时2 &&, ||, ?:,以及逗号表达式的每个运算对象计算之后3 函数调用中对所有实际参数的求值完成之后(进入函数体之前)/* 1&2*/#include <stdio.h>int main(){ int k = 2; int a = 1; k = k++ + k++; printf("k = %d\n", k); //6 ... 阅读全文
posted @ 2012-12-02 17:22 Daniel.G 阅读(348) 评论(0) 推荐(0) 编辑