内存访问方式
两者运行性能相差有20倍,为什么仅仅是嵌套方式的变化便产生了这么大的差距?这与内存层次结构中的缓存有关,看图:
这张图片显示了四种不同的内存访问方式,基本上复制程序的吞吐量是以 兆字节/秒 为单位的。这这里,不深入细节,我们看到的是,这两个函数在内存访问模式中处于不同的位置,一行接一行的访问方法比一列接一列的访问方法好很多,这和内存层次结构中的缓存有关。
扩展实验(了解即可)
- 实现一个函数返回其输入参数的绝对值,条件是限制使用的运算符类型,它必须是顺序执行的代码没有条件或循环(如何在机器中表现数据的方式)
- 炸弹实验。教我们如何阅读和理解汇编语言的方式。一颗炸弹,简单的来说,他是一个由六个阶段组成的C程序,每个阶段都需要从键盘上键入内容,如果输入了它想我们输入的内容,表明你已经拆解了这一部分的炸弹进入下一阶段,输入错误,炸弹爆炸。六个阶段拆解完成,炸弹解除。异常条件是没有源代码,只有二进制炸弹,所以为了化解炸弹,必须启动GDB,单步调试直到找到每一阶段的代码,然后逆向编译,找到它想要你输入的内容。
- 攻击实验室。针对64位体系结构,反映了从32位到64位的改变。我们将学习如何编写漏洞,利用返回到一种称为返回到返回导向编程的现代技术。
- 缓存实验。在研究内存层次结构时,在内存层次结构中中所进行的一种实验,这用于学习高速缓冲储存器这一硬件的工作原理,我们将建一个模拟器查看,然后使用一个小的转置功能,尝试着让我们的代码在模拟器上产生尽可能少的不命中。
- Shell实验。
- Malloc Lab实验。编写自己的malloc 和 free