苏嵌作业2

一  编译器三级优化分别优化了哪些

第一级:代码调整
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;

第二级:新的视角 
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法; 


第三级:表驱动状态机 
将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等)
 

二 总结gcc静态库和动态库的制作

静态库的制作

  1. gcc -c src/add.c -o add.o //制作obj文件

  2. ar -crv lib/libadd.a add.o //制作归档文件

  3. gcc src/main.c -Llib -ladd -o main //加上L(指明链接目录) l(指明链接库名)

动态库的制作

gcc -shared -fPIC -o lib/libadd.so add.c

gcc -o main main.c ./add.c

三 总结cmake的用法

cmake的亮点在于编译复杂项目上的应用 —— cmake是一个跨平台的Makefile 生成工具! 一言以蔽之——cmake 为项目自动生成Makefile

 

第一行用于指定cmake最低版本
第二行指定项目名称(这个名称是任意的)
第三行指定编译一个可执行文件,sameDirMultSrc是第一个参数,表示生成可执行文件的文件名(这个文件名也是任意的),第二个参数main.cpp则用于指定源文件。

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (sameDirMultSrc)

# 指定生成目标
#add_executable(sameDirMultSrc main.cpp tool.cpp)


 

你可能感兴趣的:(linux,内核,文件系统,网络)