C++, 3DGame
ACE_CDR::mb_align(ACE_Message_Block * mb)用于对齐mb内部数据块ACE_Data_Block所拥有的内存的起始地址,它的实现大致如下:
由于要执行内存地址对齐,那么mb->base()所指示的地址可能需要向后移动(MAX_ALIGMENT - mb->base() % MAX_ALIGMENT)个字节。但在这个之后,mb->base()指向的可用内存将比它自己薄记的少,如果需要程序正常运行,那么依赖于在往它写入数据时,写入的字节数不能大于实际大小(这个实际大小为 :mb的薄记大小-移动的距离),而这需要由程序员来控制,容易出错也就难免了。也许可以在函数mb_align内部重设mb的大小,使其薄记大小与实际有效内存大小相符,但这引起内存拷贝,这个代价也太大了。内存对齐的处理似乎应该在内存分配阶段,比如提供类似下面的分配已对齐地址功能的分配器:
但ACE实际上没这么做,它提供mb_align这个与内存分配毫不相干的功能,且希望由程序员自己来解决可能引发的问题!~
posted on 2007-03-09 15:33 Kooyu 阅读(1594) 评论(0) 编辑 收藏 引用
Powered by: C++博客 Copyright © Kooyu