苏嵌嵌入式Linux实训 第三天
一.编译器三级优化分别优化了那些?
第一级:代码调整
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;简单的语句调整、公共表达式提取、废代码删除等当前的很多编译器也能做到了,但也需要了解一些编译器的优化能力使自己的代码配合编译器做好优化;用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇编很可能没有当今的编译器产生的代码好,所以如果决定用汇编实现,那就应该按照汇编的角度来规划自己的实现,适当的参考编译器生成的汇编码也是可取的(特别是新手,我也一样);在某些领域,使用CPU的新特性和新的指令集等将产生巨大的性能收益,这些地方经常采用汇编来实现。
第二级:新的视角
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法; 尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目;
第三级:表驱动状态机
将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等)
2.总结gcc静态库与动态库的制作
静态库:制作步骤主要以下几步:
(1)根据源文件使用gcc -c 自动生成.o文件
gcc -c *.c -I …/include
(2)使用ar命令将.o文件归档
ar rcs libmylib.a *.o
动态库:
制作步骤主要以下几步:
(1)使用-fpic参数将源文件编译成.o文件
gcc *.c -c -fpic
(2)使用gcc -shared打包
gcc -shared *.o -o libmylib.so
3.总结CMake用法
(1)用cmake创建可执行文件
(2)用cmake创建动态库和静态库
(3)调用动态库和静态库
- 苏嵌工程实训-嵌入式Linux开发(基础命令)
- 苏嵌嵌入式Linux实训 第五天
- 苏嵌嵌入式Linux实训 第四天
- C语言基础知识-苏嵌实训 嵌入式 linux C 第 3 天
- 苏嵌嵌入式linux实训 第2天
- 苏嵌嵌入式linux实训 第一天
- 嵌入式Linux学习笔记第三天(文件编程)
- 嵌入式基础应用开发之Linux开发环境搭建及初步指令(苏嵌日志之Monday)
- 嵌入式开发之Linux基础第三天学习笔记 linux系统命令(二)
- linux文件编程-苏嵌实训第11天
- linux实训第三天总结
- linux下C语言编程之位运算和字符串运算中遇到的问题:20120707苏嵌实训第第六天
- 嵌入式C语言那点事(三)Linux中霸道的双向链表源码与应用
- 嵌入式系统(Linux&Android)学习路线
- 从零开始搭建嵌入式Linux平台(一)
- 我的嵌入式LINUX学习.卷34------中断分层与按键去抖
- 使用 Yocto Project 构建自定义嵌入式 Linux 发行版
- 嵌入式 Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
- 学习嵌入式Linux系统
- 嵌入式Linux 学习方法