摘要:
程序从main开始的吗?在执行main之前全局变量已经初始化,main函数的两个参数也被正确传了进来,堆和栈的初始化也已经完成,一些系统I/O也被初始化。完成上面这些工作的函数称为入口函数(Entry Point)。一个典型的运行步骤大致如下:·操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库中的某个函数。·入口函数对运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量构造等。·入口函数在完成初始化之后,调用main函数,正是开始执行程序主体部分·main函数执行完毕以后,返回到入口函数,入口函数进行清理工作,包括全局变量的 阅读全文
posted @ 2012-05-11 21:25
KingsLanding
阅读(954)
评论(0)
推荐(0)
摘要:
注:这一章的内容比较经典,之前看“深入理解计算机系统”的时候,也有看到栈帧(Stack Frame),但是不是很清楚,通过这一章的讲解,更清楚了。如果能再结合讲讲GDB调试的话就更完美了。栈:栈用于维护函数调用的上下文,离开了站函数调用就没法实现。堆:堆是用来容纳应用程序动态分配的内存区域,当程序使用malloc或new分配内存时,得到的内存来自堆里。Linux进程地址空间内存布局:在操作系统中,栈总是向下增长的。在i386下,栈顶由称为esp的寄存器进行定位。压栈的操作使栈顶的地址减小,弹出的操作使栈顶的地址增大。 程序栈实例在栈底的地址是0xbfffffff,而esp寄存器表明了栈顶,地址 阅读全文
posted @ 2012-05-11 20:57
KingsLanding
阅读(1862)
评论(1)
推荐(1)
摘要:
第八章不是很感兴趣,直接跳到第九章。 DLL即动态链接库(Dynamic Link Library)的缩写. 一个DLL中有两个数据段,一个进程间共享,另一个私有. 当我们使用“__declspec(dllexport)”时表示该符号是从本DLL导出的符号。“__declspec(dllimport)”表示该符号是从别的DLL导入的符号。创建DLL:/*math.c*/__declspec(dllexport) double Add(double a, double b){return a+b;}__declspec(dllexport) double Sub(double a, doub.. 阅读全文
posted @ 2012-05-11 20:38
KingsLanding
阅读(549)
评论(0)
推荐(0)
浙公网安备 33010602011771号