在Jason Turner 2016 CppCon演讲的这一刻"实际性能实践";,他提到,对每一个可能的数据结构进行完全的constexpr启用(我猜这意味着使每一个字段和函数都成为constexpr)可以产生更大的代码";因为这会导致更多的数据结构被编译到代码中,因此数据段中的数据比运行时计算的数据要多;(这句话是他在这个时间戳上实际说的话和他在最后对这个话题的回答的结合)。
我真的不明白这意味着什么。为什么constexpr数据结构会编译为比非constexpr的数据结构大?有人有一个实际的例子可以说明这一点吗?
在微控制器上实现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,那么我希望可执行文件会变得更大。