2016-11-04 162 views
-2

我正在閱讀CPP的STL代碼來找出一些東西。我到達矢量頭文件中的函數,該函數是:什麼時候以及爲什麼這個函數會返回別的東西

static size_type __align_it(size_type __new_size) _NOEXCEPT 

    {return __new_size + (__bits_per_word-1) & ~((size_type)__bits_per_word-1);}; 

SIZE_TYPE是爲size_t,並且__bits_per_word是:

static const unsigned __bits_per_word = static_cast<unsigned>(sizeof(__storage_type) * CHAR_BIT); 

我的編譯器和鏗鏘的版本就像是鐺-800.x .XX。

我的問題是,什麼時候和爲什麼__align_it會返回比__new_size更多的東西。

+0

爲什麼不寫一些示例代碼,將各種值傳遞給__align_it(),並顯示它返回的內容。它應該是相當明顯的。 –

+0

好吧,看起來我忘記了+會在&operator之前完成,所以它是一致的。我的錯。 –

回答

1

__new_size不能被__bits_per_word分割時,它將返回與__new_size不同的東西。換句話說,該函數用於將__new_size四捨五入爲__bits_per_word的近似倍數。

如果不是由編譯器自動確定,這是用於正確對齊結構成員的非常常用的函數。例如,當我們有char數組時,但由於訪問優化,我們仍然希望將其與unsigned字段相同的地址對齊。

相關問題