1,cpu访问速度:寄存器>L1>L2>主存>硬盘
2,c中的聚集数据类型,例如数组和结构,在汇编代码中是用连续的字节表示的,即使是对标量数据类型,汇编代码也不区分有符号和无符号整数,不区分各种类型指针,甚至也不区分指针和整数。
3,把一个值从一个存储器位置放到另一个存储器位置:先把值从存储器放到寄存器,然后再从寄存器放到目的存储器,不能直接存储器到存储器哦。
4,c编译器常用加法和移位指令来完成常数因子的乘法。
5,c对于数组引用不进行任何边界检查,而且局部变量和状态信息(例如寄存器值和返回指针)都存放在栈中,如果再对一个越界的数组元素的写操作破坏了存储在栈中的状态信息,最后,当程序使用这个被破坏的状态,试图重新加载寄存器或执行ret指令时,就会出现严重的错误。
6,编写对高速缓存友好的代码:1,对局部变量的反复引用是友好的,因为编译器能够将他们缓存在寄存器文件中,这个是时间局部性。2,步长为1的引用是友好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块,这个是空间局部性。
7,利用时间局部性,使得频繁使用的字从L1中取出,利用空间局部性,使得尽可能多的字从一个L1高速缓存行中访问到。