C++, 3DGame
ACE_CDR::mb_align(ACE_Message_Block * mb)用于對齊mb內(nèi)部數(shù)據(jù)塊ACE_Data_Block所擁有的內(nèi)存的起始地址,它的實(shí)現(xiàn)大致如下:
由于要執(zhí)行內(nèi)存地址對齊,那么mb->base()所指示的地址可能需要向后移動(dòng)(MAX_ALIGMENT - mb->base() % MAX_ALIGMENT)個(gè)字節(jié)。但在這個(gè)之后,mb->base()指向的可用內(nèi)存將比它自己薄記的少,如果需要程序正常運(yùn)行,那么依賴于在往它寫入數(shù)據(jù)時(shí),寫入的字節(jié)數(shù)不能大于實(shí)際大小(這個(gè)實(shí)際大小為 :mb的薄記大小-移動(dòng)的距離),而這需要由程序員來控制,容易出錯(cuò)也就難免了。也許可以在函數(shù)mb_align內(nèi)部重設(shè)mb的大小,使其薄記大小與實(shí)際有效內(nèi)存大小相符,但這引起內(nèi)存拷貝,這個(gè)代價(jià)也太大了。內(nèi)存對齊的處理似乎應(yīng)該在內(nèi)存分配階段,比如提供類似下面的分配已對齊地址功能的分配器:
但ACE實(shí)際上沒這么做,它提供mb_align這個(gè)與內(nèi)存分配毫不相干的功能,且希望由程序員自己來解決可能引發(fā)的問題!~?
posted on 2007-03-09 15:33 Kooyu 閱讀(1602) 評論(0) 編輯 收藏 引用
Powered by: C++博客 Copyright © Kooyu