帮忙看下这个宏是什么意思?

wangpeng_118 2011-09-15 03:52:11
#if !defined ACE_MALLOC_ROUNDUP
# define ACE_MALLOC_ROUNDUP(X, Y) ((X) + ((Y) - 1) & ~((Y) - 1))
#endif
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-09-16
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
翻越寒武 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangpeng_118 的回复:]
我在别的论坛上提问,下面是正确的回答,请大家参考:

“这个宏的作用是将x对齐到8的倍数。
取反(8-1)后&,是为了把地址最后3个bit置0;
前面那个地址+(8-1)的操作是为了保证这个取整只会空出几个字节而不是覆盖之前的数据。”
[/Quote]
是先求+结果后再与取反后的值求位与吧
qq120848369 2011-09-16
  • 打赏
  • 举报
回复
向上取整额。
wangpeng_118 2011-09-16
  • 打赏
  • 举报
回复
我在别的论坛上提问,下面是正确的回答,请大家参考:

“这个宏的作用是将x对齐到8的倍数。
取反(8-1)后&,是为了把地址最后3个bit置0;
前面那个地址+(8-1)的操作是为了保证这个取整只会空出几个字节而不是覆盖之前的数据。”

wangpeng_118 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liuxingjiaofu 的回复:]

相当于一个函数的功能
x+(y-1)&(~(y-1))=x
[/Quote]

我感觉也是,这个宏实际就是x的值,但是ACE里面为什么要定义一个这样的宏?有什么作用呢?
wangpeng_118 2011-09-15
  • 打赏
  • 举报
回复
代码里是这样用的:
return ACE_MALLOC_ROUNDUP( sizeof(*this), ACE_MALLOC_ALIGN);
其中:#define ACE_MALLOC_ALIGN 8

看上面的代码,这个宏好像是计算长度的作用。

  • 打赏
  • 举报
回复
相当于一个函数的功能
x+(y-1)&(~(y-1))=x
turing-complete 2011-09-15
  • 打赏
  • 举报
回复
定义一个带两个参数的宏,进行。。。运算
yinlijun2001 2011-09-15
  • 打赏
  • 举报
回复
还是X
((Y) - 1) & ~((Y) - 1))=0
clannadgirl 2011-09-15
  • 打赏
  • 举报
回复
写得很清楚了啊
bdmh 2011-09-15
  • 打赏
  • 举报
回复
这个宏执行 ((X) + ((Y) - 1) & ~((Y) - 1)),
比如代码中有
ACE_MALLOC_ROUNDUP(1,2),那就把上面x和y替换为1和2计算

64,637

社区成员

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

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