首页 > 后端开发 > C++ > 您应该为 C 中的数组放置预分配多少内存?

您应该为 C 中的数组放置预分配多少内存?

Patricia Arquette
发布: 2024-12-21 13:34:13
原创
759 人浏览过

How Much Memory Should You Pre-allocate for Array Placement-new in C  ?

数组放置新:管理缓冲区分配中的开销

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板