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;
}
老师这一段代码,我有点一知半解的。
- 首先对要做数据对齐的原因不是很懂。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调用的次数应该是和进位后调用次数相同的,处理速度应该也是相同的啊。
- 32位cpu是4字节对齐,在64位是否需要8字节对齐啊?我了解说类型占用字节数是在编译阶段完成,主要取决于编译器。不过真正调用的时候,是4字节对齐还是8字节对齐是取决于运行设备系统的cpu吗?
对这一块的内容真的是一知半解,网上找了很久没有详细讲解这方面的资料,希望老师能解决困惑,非常感谢!
写回答
3回答
-
Monkey_HouS
2020-04-24
我的理解是CPU的地址总线或者说是数据总线,有64个引脚,就是64位,每次数据的吞吐量是64个引脚全部用完,这样效率最高.
00 -
李超
2020-04-01
如果你对这块感兴趣的话,推荐你一本书,叫计算机系统,那可是一部巨著,要花不少时间研读
00 -
李超
2020-04-01
所呀,对齐之后就会快,这是计算机的基本原理的知识
00
相似问题