一些书评概要

可以说这本书的高度已经超越了《C Primer Plus 6》!

描述了主流操作系统的函数调用约定,以及如何制作静态库和动态库并连接、加载使用

主流的GNU语法扩展,这篇章可谓独树一帜,市面上也是绝无仅有的!

机器码和汇编都没可移植性

C 最初用来重新实现 Unix

标准过程 K&R C > 第一个国际标准 ANSI/ISO 的 C89/90(同一个东西) > C99 > C11

C99

内联函数 、 可变长度的数组、 灵活的数组成员(⽤于结构体) 、 复合字⾯量、 指定成员的初始化器、 浮点数改进、 不定参数个数的宏定义, long long int以及复数类

GCC/Clang 才支持90%, vs2015 70% 左右

  • 单行注释
// 
  • bool
#include<stdbool.h>
bool flag=true

  • 循环体内的变量
for(int i=0; i<10; i++){
    // do someting ...
}
  • restrict指针
 void *memcpy(void *restrict s1, const void *restrict s2,size_t size);  

确保两个对象没有互相重叠的地方

before

基础需要回炉的人太多了

计算机体系结构的现状及其发展趋势,研究具体表现为指令系统

CISC许多指令通过加硬件资源(寄存器等),用微码(指令可再分成微操作)实现,支持复杂的高级语言的语义;RISC更隐蔽,若干精简指令有机组合去支持

RISC 把使用率高的,数量少的指令,逻辑硬布线,基本指令单周期能执行完

1.1

机器语言指令:算术、逻辑运算、 移位、 分⽀、 中断、 I/O 、 寄存器、 ⽴即数等

简(ARM、MIPS),复杂(intel amd) 指令集

  • X86

  • MMX

对多媒体处理中大量反复的计算过程,SIMD(单指令多数据),一条指令在一个时钟周期内对多个数据进行处理

饱和运算 运算结果大于一个上限或小于一个下限时,结果就等于上限或是下限

如:BYTE最大值是255(0xFF),0xF1+0x35应该是等于0x126(294),> 0xFF(255),饱和运算结果就是0xFF

图像处理里经常有(比如说增加亮度)两种灰度值运算后要判断只是否大于255或小于0,根据结果再取255或0,又是if又是什么的。现在只要一条指令就OK了

SSE2/3/4

Sandy Bridge Intel Advanced Vector Extensions (Intel AVX) 256bit的SIMD

CPU 指令集在不断发展,需求不断增加,指令集也在不断扩展

ide 对 SIMD 指令集的支持

VC6VC7Intel Compilermasm
MMX
SSE
SSE2
SSE3

图像,视频,数字信号,矩阵处理算法等比如有 Intel IPP函数库