tmp_yuv_frame_len的细节疑问

来源:7-7 实现YUV播放器

慕瓜831898

2020-04-01

if (yuv_frame_len & 0xF) {
	tmp_yuv_frame_len = (yuv_frame_len & 0xFFF0) + 0x10;
}

老师这一段代码,我有点一知半解的。

  1. 首先对要做数据对齐的原因不是很懂。yuv_frame_len或tmp_yuv_frame_len的作用是为了开辟一段空间来放video_buf:video_buf = (Uint8*)malloc(tmp_yuv_frame_len);video_buf是一个指针4字节,指向一块tmp_yuv_frame_len长的空间,这里做了一次4对齐,但这样会让cpu处理更快吗?就比如在首地址相同的情况下,一个每次读写长度1023字节的区域,会比1024字节长度的区域更慢吗?我觉得这里不进位的cpu调用的次数应该是和进位后调用次数相同的,处理速度应该也是相同的啊。
  2. 32位cpu是4字节对齐,在64位是否需要8字节对齐啊?我了解说类型占用字节数是在编译阶段完成,主要取决于编译器。不过真正调用的时候,是4字节对齐还是8字节对齐是取决于运行设备系统的cpu吗?
    对这一块的内容真的是一知半解,网上找了很久没有详细讲解这方面的资料,希望老师能解决困惑,非常感谢!
写回答

3回答

Monkey_HouS

2020-04-24

我的理解是CPU的地址总线或者说是数据总线,有64个引脚,就是64位,每次数据的吞吐量是64个引脚全部用完,这样效率最高.

0
0

李超

2020-04-01

如果你对这块感兴趣的话,推荐你一本书,叫计算机系统,那可是一部巨著,要花不少时间研读

0
0

李超

2020-04-01

所呀,对齐之后就会快,这是计算机的基本原理的知识

0
0

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2732 学习 · 814 问题

查看课程