View on GitHub

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.

Read more »

本篇以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在逻辑上的优化.

Read more »