【发布时间】:2021-07-19 11:56:13
【问题描述】:
我正在优化以性能为优先的程序的计算密集型部分。
目前我正在使用 std::array 来处理无法立即初始化的各种类型的数据和缓存。为了性能,我想为缓存分配内存没有默认初始化元素,这样我可以在计算它们后用适当的值初始化它们。我能想到的唯一方法是使用 malloc。是否有任何“更清洁”的方式来实现这一点,这是在 C++ 中合理使用 malloc 的吗?
我知道“永远不要使用 malloc/new[]”的常见建议。显然需要基于测量进行优化。这不是过早的优化。这部分代码在每个线程上每秒调用约 250 万次,每次调用应在 1000 纳秒内运行。
【问题讨论】:
-
最佳选择是在到达这部分代码之前分配一次,并完全避免在这个关键部分内进行分配/重新分配。就此而言,
malloc或new没有任何问题。不同之处在于malloc对对象构造一无所知。如果您只是分配一个“普通旧类型”块,那么 malloc 就可以了。如果您分配的内容依赖于构造函数来进一步分配等,那么new是您的选择。是的,如果您不能预先分配/构造其他东西,这将是对malloc的有效使用。 -
在优化之前,您现在每秒是否在堆上分配
std::array250 万次?
标签: c++ performance optimization memory malloc