void *x264_malloc( int i_size )解析 (2011-05-04 14:28:18)
标签: it | 分类: X264代码学习笔记 |
1 将申请的内存地址调整到16的倍数;
2 将调整前的地址和长度放在 调整后地址的前面8个字节中,便于释放内存;
2 将调整前的地址和长度放在 调整后地址的前面8个字节中,便于释放内存;
内存地址字节对齐方便代码优化 |
做移植时刚好看到这一段,开始也搞不明白。后来查了一,这其中有两个关键点: 1是二级指针的使用,二级指针可以看成是一个一维的指针数组。 2是内存管理思想。 下面具体分析一下: 这段代码主要是为了实现:返回一个16字节对齐的 i_size 大小的内存;同时再分配该内存时添加了一些额外信息在所分配的内存的头部。 上面的代码中 15 + sizeof( void ** ) +sizeof( int ) 下面再说一下,内存的释放: 按照上面的分析,指针p其实就是指针align_buf。经过上面的分析应该很容易就知道 *( ( ( void **) p ) - 1 ) 经过这么分析,感到,c语言的指针真的非常强大!!!! |