繁体   English   中英

C ++无需初始化即可在堆栈上分配

[英]C++ Allocate on stack without initialization

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

在一个经常调用的函数中,我需要一个固定大小的(小)类MyClass数组。 一开始,我使用了std :: vector。 整个过程很小(通常为256个项目,类大小为12字节,如果数组是16字节对齐的,则意味着3072字节)

现在发生的是:

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

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

谢谢,

艾蒂安

您不需要初始化吗? 因此,大概MyClass没有构造函数,也没有需要构造的数据成员吗? 在这种情况下,编译器将不会进行任何初始化。 因此,只需使用new。

如果MyClass确实有构造函数,那么您应该考虑为什么在您不需要初始化时就这样做了。

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

但是您是正确的,从向量切换到数组应该可以节省一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM