C++在堆栈上分配而不初始化

标签 c++ class initialization stack allocation

我正在编写一个速度优化至关重要的程序。每增加 1% 的速度都是好的。

在一个被多次调用的函数中,我需要一个(小)类 MyClass 的固定大小数组。一开始,我使用了一个std::vector。整个东西很小(一般是256项,类大小是12字节,如果数组是16字节对齐的话就是3072字节)

现在发生了:

  • 使用分配在堆栈上的 C 风格数组 MyClass[256] 可以提高性能。在我的理解中,这是因为没有完成内存分配/删除,堆栈分配是免费的。
  • 使用::operator new 进行内存分配也可以提高性能。因为它跳过了我不需要的类初始化。除此之外,我更喜欢尽可能避免原始内存初始化。

所以在堆栈上分配和跳过初始化应该会更快。如果需要,我可以重写类构造函数,但我不知道该怎么做。

谢谢,

艾蒂安

最佳答案

不需要初始化?所以大概 MyClass 没有构造函数,也没有需要构造的数据成员?在那种情况下,编译器无论如何都不会进行任何初始化。所以只用新的。

如果 MyClass 确实有一个构造函数,那么您应该考虑为什么它会像您所说的那样不需要初始化。

如果 MyClass 确实有需要构造的数据成员(比如 std::string),那么我会查询您关于不需要初始化的断言。

但另一方面,您说对了,从 vector 切换到数组应该可以节省您一些时间。

关于C++在堆栈上分配而不初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18978322/

相关文章:

C++ 错误枚举和 CRTP

c++ - 在模板中指定允许的参数

c# - 将 C++ 结构转换为 C# 以用于 UDP 通信

c++ - initializer_list 中的未初始化值(编译器错误?)

c++ - thread_local 变量初始化

c++ - 在这种情况下循环指针可以吗?

c++ - 取消 deadline_timer,无论如何都会触发回调

C# - 动态执行和确定类调用

c++ - 如何在不实例化的情况下访问成员变量,C++

c# - 在对象初始值设定项中使用 "this"