gpt4 book ai didi

c++ - 关于 C++ 中自动变量效率大小的实际限制是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:24 24 4
gpt4 key购买 nike

我有以下变量(简化情况):

std::array<std::array<float, 4>, 4> matrix;

我需要从我程序中的函数返回这个变量。我可以使用 std::unique_ptr 或将其作为值返回(自动与动态内存)

由于我的平台上 float 的大小为 4 个字节,并且有 16 个位置,因此大小为 16 * 4 = 64 字节。

没有自定义分配器等的动态内存除了通常很慢之外还会导致内存碎片,所以我想知道作为自动内存与动态内存传递数据的实际限制是什么?我应该从多大开始使用动态内存?这个问题无法回答吗?

最佳答案

如果您担心作为 init 函数的结果返回这样的结构的大小,那么我不会(对该声明的警告(如果您不确定,您可以随时测量))。

所有现代编译器都已经在进行 RVO 和 NRVO 优化。因此,即使您按值(value)返回,也不会制作拷贝。编译器已经计算出结果将发送到特定目的地,并删除了拷贝并在目的地就地构建它。

因此大小限制并不是真正的问题。

C++11 还引入了移动语义的概念。所以你不需要按值返回,而是通过移动返回。在大多数 std 容器中,这仅意味着交换几个指针(不幸的是,这对 std::array 没有帮助),但在一般情况下它运行良好。

所以对我来说,这可能是值(value)返回。尽管我可以将该结构包装在一个类中。这样一来,如果现实不切实际并且确实花费很多,我可以在内部更改类以进行补偿,而无需更改代码。

关于c++ - 关于 C++ 中自动变量效率大小的实际限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com