0

既然C++有幾個附加的帶有std :: align_val_t參數的新的和刪除操作符,那麼它們的有效值是什麼?對於C++分配器,std :: align_val_t有效的對齊值是什麼?

他們是1,2,4,8,...等等?

是否有值的上限?

由編譯器定義?

+1

我期望值與['alingas'](http://en.cppreference.com/w/cpp/language/alignas)相同 – StoryTeller

+0

@StoryTeller是否有一部分C++標準哪些說他們必須是相同的alignas?是什麼讓你期望他們是一樣的? – LincolnMan

+0

那麼,一個相似的目的。 – StoryTeller

回答

1

std::align_val_t及其約束在語言支持標頭<new>的摘要中指定。所以,如果一個讀[new.delete]它說以下內容:

除非另有規定,否則的 規定[basic.stc.dynamic]適用於運營商和新運營商 刪除的庫版本。 如果傳遞給這些函數的任何 的對齊參數的值不是有效的對齊值,則行爲是 未定義。

所以,你必須通過一個值是有效的,在有效校準的定義在[basic.align]/4給出:

路線被表示爲類型的std ::爲size_t的值。有效的 對齊僅包括基本類型的對齊表達式 返回的值,以及可能爲空的其他實現定義的 值集合。每個對齊值應爲兩個非負整數冪。

所以是的,只有兩個冪加上你的實現明確允許的任何值。並且不要擔心上面提到的std::size_tstd::align_val_t僅僅是一個枚舉類std::size_t爲基本類型:

enum class align_val_t : size_t {}; 

這也暗示了上限,你問一下,基本上std::numeric_limits<std::size_t>::max()。但是當然你的實現可能會執行一個較低的。

+0

謝謝。就其而言,這是很好的。你能回答我的問題的其他部分嗎?支持的路線的上限值是多少? – LincolnMan

+0

@LincolnMan - 唯一的界限似乎是'std :: numeric_limits :: max()'。 – StoryTeller

相關問題