数组放置新:管理缓冲区分配中的开销
C 11 标准允许使用放置新进行数组分配,其中内存位置是手动指定的。然而,在分配期间,可能会向缓冲区大小添加由 x 和 y 表示的未指定的开销值。这就提出了一个问题,即在使用数组放置新时如何确定要预分配的内存量。
5.3.4 [expr.new] 中提供的标准示例说明了 new(buffer) std: :string[10] 将在内部调用operator new[](sizeof(std::string) * 10 y, buffer)。这意味着开销值 y 如果非零,可能会导致预分配缓冲区太小。
修正:标准放置函数的开销消除
最近引入了一个修复(2019 年 11 月的缺陷报告),消除了使用标准布局函数运算符时未指定的开销 y新[](std :: size_t,void * p)。这意味着此特定放置函数的开销始终为零。
自定义放置函数的影响
虽然标准放置函数的开销已被删除,但它使用自定义放置函数时仍然是一个潜在的问题。对于这种情况,重要的是不要依赖特定的开销值。相反,建议实现一个自定义放置数组新函数,该函数可以动态确定运行时的开销。
通过检查自定义放置数组新函数中 n 的值并将其与指定的缓冲区限制进行比较,人们可以推断特定平台的开销并相应地调整缓冲区分配。
结论
使用数组时放置新功能,了解与自定义放置功能相关的潜在开销至关重要。实现一个自定义放置数组新函数,可以检测运行时的开销,确保分配正确的内存量并避免潜在的分配失败。
以上是您应该为 C 中的数组放置预分配多少内存?的详细内容。更多信息请关注PHP中文网其他相关文章!