宏和函数的区别是什么
- 宏是把参数替换到文本中
- 宏可以完成函数做不到的事情,比如宏的参数可以是类型而函数做不到
- 宏由于与类型无关,所以不够严谨
- 宏可能带来运算优先级的问题,导致程序出错
- 如果宏过长可能大幅度增加宏的长度
什么是静态链接和动态链接,静态连接和动态链接分别是什么,
一个源文件可能需要另一个源文件中定义的函数。但每个文件都是独立编译的,所以需要将这些源文件产生的目标文件进行连接,产生可执行程序,这个过程就叫做静态连接
静态连接浪费空间,因为每个可执行程序都要对所需要的目标文件有一份副本,比如多个可执行程序都调用了printf函数那么每个可执行程序都有printf.o
更新比较困难,因为库函数更新后,意味着需要重新编译连接形成可执行程序
优点是执行速度比较快,因为已经用了可执行程序所需要的任何东西
动态链接是将程序按模块分成多个相对独立的部分,只有在程序运行时才将它们链接在一起形成可执行程序。
优点是节省空间,更新快,只需要替换原来文件
缺点是因为在程序运行后才链接,会丢失一部分的性能,损失在百分之五一下,相比空间节省和构建和升级时的灵活性来说是值得的
程序执行的过程
预处理,编译,汇编,连接
内存四区分别存放哪些内存
栈区存放函数的局部变量,形参,由编译器分配释放
堆区一般由程序员手动释放分配
全局区存放静态变量,全局变量,该区域由操作系统分配释放
代码区存放二进制代码,由操作系统管理,只读共享,利于程序调用执行,防止修改