本文译自The C Programming Language的4.7章节.
C语言 | 头文件
本文译自The C Programming Language的4.5章节.
C语言 | 利用越界和溢出
Nov. 30, 2018 at Dubai
Nov. 30, 2018 at Dubai.
Cartesian 3D Vector Lib
A simple vector library written in plain C for educational purpose.
Introduction
This library is written in hope to simplify the coding process for non-professional vector computation.
This library should not be used for industrial or scientific use due to the limited precision and performance; Complex number is not supported either.
汇编视角:不同优化级别下的GCC行为分析
本篇以memcpy这一函数为例, 分别在0-3的gcc优化级别下编译并反汇编, 并对反汇编得到的代码进行分析, 以观察不同优化级别下gcc的行为.
本文使用的gcc版本 7.3.0
以下汇编与反汇编均在x64平台上进行
Overview
gcc的官方文档中有对于优化参数-O
的描述. 简要概括如下:
优化级别 | 描述 |
---|---|
0 | 关闭优化. gcc的默认选项 |
1 | 在不明显拖慢编译速度的情况下减小代码尺寸, 提升执行速度 |
2 | 在不以存储空间换运行时间的前提下, 采用几乎所有gcc支持的优化方法 |
3 | 二级优化的基础上进一步优化 |
还有便于debug的Og
, 骚操作(极致优化但不遵从编码规范)的Ofast
, 介于2-3级别间的Os
.
整体上而言, 优化级别越高, 编译速度会越慢, 占用的内存越大; 同时, 生成的代码运行时速度越快, 可读性越低.
下面我们用实际的例子来看一看不同优化级别下gcc的具体行为. 选择memcpy作为例子是因为它的实现代码足够简单, 但是涉及了传参, 条件判断和循环, 是逻辑密集型的代码, 能很好的体现gcc在逻辑上的优化.