无题
程序的结构和执行
程序的机器级表示
使用基于条件的数据传送替代基于条件的控制转移
// 基于条件的数据传送
int ntest = x >= y;
if (ntest) {
...
} else {
...
}
// 基于条件的控制转移
if (x >y) {
} else {
}while的两种汇编形式
jump to the middle
go to test;
loop:
body
test:
t = test-expr;
if (t){
goto loop;
}guarded-do
t = test-expr;
if(!t){
goto done;
}
loop:
body
t = test-expr;
if(t) {
goto loop;
}
done:
对抗缓冲区溢出攻击
- 地址空间布局随机化:栈随机化,每次先在栈上随机分配一大块空间;程序每次加载地址不同
- 栈破坏检测:在栈帧与栈状态间存放一个特殊的
金丝雀
值 - 限制可执行代码区域
优化程序性能
- 优化编译器的能力和局限性
- 确定两个指针是否指向不同的内存
restrict
关键字 - 内联函数替换函数调用
- 确定两个指针是否指向不同的内存
- 消除循环的低效率
- 将某些定长的库函数结果移除循环
- 减少过程调用
- 消除不必要的内存引用
- 使用临时变量替代指针
- 循环展开
- 提高程序并行性:可以考虑使用SIMD向量指令
- 对dst和src地址相同的取值操作,造成写/读相关问题
- 存储单元中存在存储缓冲区,每个缓存区由地址
s_addr
和数据s_data
组成;src
和dst
不同时,数据和地址可以并行取出,如果相同,必须保证s_addr
在s_data
前完成
- 存储单元中存在存储缓冲区,每个缓存区由地址
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LZY的Code生活!