请问这段代码是做虾米用的?

cafetree 2006-09-15 09:28:30
好像是内存对齐的代码,哪位高手能帮忙看一下,解释一下
CV_INLINE void* cvAlignPtr( const void* ptr, int align=32 )
{
assert( (align & (align-1)) == 0 );
return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) );
}

CV_INLINE int cvAlign( int size, int align )
{
assert( (align & (align-1)) == 0 && size < INT_MAX );
return (size + align - 1) & -align;
}
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkoasis 2006-09-15
  • 打赏
  • 举报
回复
内存对齐比较麻烦,但是好像编译器都会做这些工作!
cafetree 2006-09-15
  • 打赏
  • 举报
回复
thanks,好久没接触操作系统了,得从新看一下了,谢谢各位捧场
OOPhaisky 2006-09-15
  • 打赏
  • 举报
回复
oo(为了名副其实,努力学习oo技术ing)说得好啊。

楼主需要操作系统方面的知识。
cafetree 2006-09-15
  • 打赏
  • 举报
回复
再问一下哦,这些知识那些书本有介绍?好认真研究一下
oo 2006-09-15
  • 打赏
  • 举报
回复
内存对齐主要是为了提高访问速度,
另外有些CPU要求内存对齐,否则内存操作可能会有问题
cafetree 2006-09-15
  • 打赏
  • 举报
回复
请问高手,这样做的目的是什么
oo 2006-09-15
  • 打赏
  • 举报
回复
CV_INLINE void* cvAlignPtr( const void* ptr, int align=32 )
{
assert( (align & (align-1)) == 0 ); //确保align是2的幂
return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) ); //把指针调整到align的整数倍地址
}

CV_INLINE int cvAlign( int size, int align )
{
assert( (align & (align-1)) == 0 && size < INT_MAX );
return (size + align - 1) & -align; //把size调整到align的整数倍

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧