在Jason Turner 的 2016 CppCon 演講“Practical Performance Practices”的這一刻,他提到完全 constexpr 啟用每個可能的資料結構(我猜這意味著使每個可能的欄位和函式 constexpr)可以導致更大的代碼“因為這會導致更多的資料結構被編譯到你的代碼中,所以你在資料段中的資料比在運行時計算的要多”(這句話是他在這個時間戳上實際所說的內容和他最后說作為對有關該主題的問題的回答)。
我真的不明白那是什么意思。為什么 constexpr 資料結構會編譯成比非 constexpr 資料結構大?有沒有人有一個實際的例子來說明這一點?
uj5u.com熱心網友回復:
在微控制器上實作 7 位回圈冗余校驗 (CRC) 演算法時,我發現提前構建一個 256 位元組查找表很方便,代碼如下:
uint8_t crc_table[256];
for (unsigned int i = 0; i < 256; i )
{
crc_table[i] = some_crc_function(i);
}
所以如果你crc_table變成一個constexpr在編譯時計算的東西,你的工具鏈必須在你的可執行檔案中存盤一個 256 位元組的表,這會占用空間。它還可以洗掉生成 CRC 表的代碼,但如果該代碼的機器指令占用少于 256 個位元組,那么我希望可執行檔案變得更大。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/476403.html
標籤:C 模板 编译器构造 常量表达式 constexpr 函数
下一篇:多型性產生奇怪的行為
