Linux汇编之内存优化

汇编 2015年03月06日 ,

LINUX汇编内存优化

经过前面对Linux汇编语言(ASM)中内在操作指令的学习,枫竹梦下面介绍汇编语言的内存优化问题。

内存优化

内存访问是处理器执行的最慢的功能之一。在编写高性能的汇编语言程序时,最好尽可能地避免内存访问。只要可以把变量保存在寄存器中。

当不可能把所有的数据都保存在寄存器中时,应该试图优化应用程序的内存访问。对于使用数据缓存的处理器来说,在内存中按照连续的顺序访问内在能够帮助提高缓存命中率,因为内在块会一次被读取到缓存中。

当使用内存时,另一个要考虑的问题是处理器如何处理内存的读取和写入。大多数处理器都被优化为从数据段的开始位置,在特定的缓存块中读取和写入内在位置。如奔腾4处理器来说,缓存块的长度是64位,如果定义的数据长度超过64位,必须用两次缓存操作才能获取或者存储内存中的数据元素。

Intel建议:

  • 按照16字节边界对准16位数据
  • 对准32位数据使它的基址是4的倍数
  • 对准64位数据使它的基址是8的倍数
  • 避免很多小的数据传输,而是使用单一的大型数据传输
  • 避免在堆栈中使用大的数据长度(比如80位和128位浮点值)

在数据段中对准数据可能是困难的。数据元素被定义的顺序对于应用程序的性能可能是到头重要的。就尽量将相同类型的数据定义在一起,不同长度的数据元素放在数据段结尾进行定义。另gas汇编器支持.align命令,用于数据的对准,这在以后会进行介绍。

(完)

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《Linux汇编之内存优化》
日志链接:http://furzoom.com/linux-asm-memory-alignment/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部