程序的结构和执行¶
约 362 个字 33 行代码 预计阅读时间 2 分钟
程序的机器级表示¶
- 使用基于条件的数据传送替代基于条件的控制转移
C
// 基于条件的数据传送
int ntest = x >= y;
if (ntest) {
...
} else {
...
}
// 基于条件的控制转移
if (x >y) {
} else {
}
-
while的两种汇编形式
-
jump to the middle
-
guarded-do
-
对抗缓冲区溢出攻击
- 地址空间布局随机化:栈随机化,每次先在栈上随机分配一大块空间;程序每次加载地址不同
- 栈破坏检测:在栈帧与栈状态间存放一个特殊的
金丝雀
值 - 限制可执行代码区域
优化程序性能¶
- 优化编译器的能力和局限性
- 确定两个指针是否指向不同的内存
restrict
关键字 - 内联函数替换函数调用
- 消除循环的低效率
- 将某些定长的库函数结果移除循环
- 减少过程调用
- 消除不必要的内存引用
- 使用临时变量替代指针
- 循环展开
- 提高程序并行性:可以考虑使用SIMD向量指令
- 对dst和src地址相同的取值操作,造成写/读相关问题
- 存储单元中存在存储缓冲区,每个缓存区由地址
s_addr
和数据s_data
组成;src
和dst
不同时,数据和地址可以并行取出,如果相同,必须保证s_addr
在s_data
前完成