当 CPU 将某些内容从内存复制到 CPU 缓存时,它是以块的形式进行的。这些块是缓存线,它们具有固定的大小。当数据存储在 CPU 缓存中时,它是以行的形式存储的。使数据适合目标架构的缓存行大小对于性能非常重要,因为它会影响数据局部性。
ARMv7 使用 32 字节高速缓存行(如 PowerPC)。 A9 处理器使用 64 字节高速缓存行。因此,您将看到渲染为 64 字节边界上且尺寸为 64 字节倍数的矩形的最大好处。
另一方面,图形加速器确实更喜欢处理维度为 2 的平方幂的图像数据。这与缓存行或字节对齐没有任何关系。这是另一件可能对性能产生重大影响的事情。
在您链接到的特定情况下,调用 Apple API(核心动画、QT 等)。代表调用者执行此类优化。对于 CoreAnimation,调用者向其提供正在针对硬件进行优化的数据。根据 Path 在您链接到的文档中所写的内容,他们建议提供不必优化的核心动画数据(在本例中,优化并制作副本)以避免优化步骤。
因此,如果您的图像尺寸是 64 字节的倍数,并且每个尺寸是 2 的平方次幂,那么您就可以开始了;)将该图像渲染到屏幕上 64 字节边界上的区域也很好,但对于除了游戏这样的全屏应用程序之外的任何东西来说并不总是现实的。
也就是说,使用仪器。构建您的应用程序,使用 Instruments 和代表性工作负载对其进行分析(UIAutomation 非常适合此操作)。如果您发现滚动性能问题,Instruments 将为您提供将瓶颈归零所需的一切。
我可以诚实地说,我见过的所有滚动性能问题都没有涉及字节对齐或缓存行。相反,它是其他形式的核心动画滥用(不使用光栅化和缓存),或者在主线程上做了太多其他工作,等等。
有关字节对齐对性能影响的指导在Quartz 2D 编程指南 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-CJBHBFFE
这是 Core Animation 在进行复制时优化图像的格式。如果您已经拥有 Core Animation 想要的格式的数据,它将跳过可能昂贵的优化步骤。
如果您想了解有关 iOS 图形管道如何工作的更多信息,请参阅:
WWDC 2012 第 238 场会议“iOS 应用程序性能:图形和动画” https://developer.apple.com/videos/wwdc/2012/
WWDC 2012 第 235 场会议“iOS 应用程序性能:响应能力” https://developer.apple.com/videos/wwdc/2012/
WWDC 2011 第 121 场“理解 UIKit 渲染” https://developer.apple.com/videos/wwdc/2011/
iOS 设备兼容性参考:OpenGL ES 图形 https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html