编译:把源代码转换成机器代码(还不可以执行,只能与操作系统交流,不能与硬件交流)(生存obj文件)
链接:告诉操作系统,要用哪些,把原码打造成操作系统可用的东西,link过程会生出与平台相关的格式。(windows根据PE结构生存exe文件)
汇编代码:C/C++生成与之一一对应的汇编代码,汇编包含三种语句
1:赋值语句:eg int num = 10;(占用内存空间,占用的栈)
2:跳转语句
3:计算语句
内存中 栈、堆、代码区,常量区(保存常量),都是分开的,这样做安全性更高,对代码区和常量区进行保护(例如只读不写)
栈默认分配1024Kbyte,但是是可变的,栈用来存储临时变量,ebp寄存器记录栈的游标(一般不变),esp记录用到的最高位置的游标(会变),
栈还会存储跳转后的返回地址(调用函数的时候,用完了得回来,这时候就是用栈(这里ebp会改变到esp的位置(反汇编窗口可看到),后面回来的时候就恢复到原来的位置))
堆的使用,使用完了必须要自己来释放,否则会发生内存泄漏(指针的时候会讲)
作业:编写输出字符串的程序(Hello World),在反汇编窗口记录整个函数调用过程的ESP EBP的变化过程。