以下兩段是從N4140複製的(重點是我的)。我想我可以理解N4140中的§5.3.4/ 11,但擴展的分配函數的概念對我來說是難以理解的
§5.3.4/ 11:
當新表達調用的分配功能和 分配具有不被擴展,所述新表達經過 請求分配函數的空間量爲
std::size_t
類型的第一個 參數。該論據應不小於正在創建的對象的大小 ;它可能大於僅在對象是數組時才創建的對象的大小 。對於char
和unsigned char
陣列中,新表達的 結果和由 分配函數返回的地址之間的差應是任何對象類型,其最嚴格的 基本對齊要求(3.11)的整數倍大小 不大於正在創建的數組的大小。因爲分配函數被假定爲返回指向存儲器 的指針,該指針適合於具有基本對齊的任何類型的對象,所以這種陣列分配開銷的約束允許分配字符數組的其他對象的其他對象的通用慣用法,其中 其他對象類型將在稍後放置。末端音符]
§5.4.3/ 12
當新表達調用的分配功能和 分配已被擴展,尺寸參數傳遞給 分配呼叫不得大於 指定的上述呼叫的大小加上擴展的大小 如果呼叫未被擴展,則必須加上任何填充y將對齊分配的內存中的 分配的對象。
我可以理解§5.3.4/ 11,但是其已被擴展的分配功能的概念是難以理解的我,如上面§5.4.3/ 12所列。
這基本上意味着,如果符合/ 12中提到的條件,編譯器可以一次分配'sizeof(class)* 1000'而不是分配'sizeof(class)'1000次。 – SingerOfTheFall