[llvm-dev] Skipping construction/destruction of stack allocated objects
Eli Friedman via llvm-dev
llvm-dev at lists.llvm.org
Tue Jan 15 19:16:46 PST 2019
On 1/15/2019 6:09 PM, Alexandre Isoard via llvm-dev wrote:
> For performance reasons, I would like to provide a way to skip
> construction/destruction of objects that are stack allocated.
> Typically, C-style arrays of std::complex create an initialization
> loops that is almost always unnecessary.
> I am thinking of providing an __attribute__((uninitialized)) that can
> be applied to an object declaration:
> std::complex<float> foo __attribute__((uninitialized));
> // does not need to generate a zeroinitializer loop here
> // does not need to generate a destructor loop here
> (std::complex<float> don't have one anyway)
> Formally speaking, we won't call constructors/destructors on those
> objects anymore. We would provide "uninitialized" memory in the same
> meaning as malloc/free.
> Do you see this as a good idea? Do we already have a better way of
> achieving this?
The standard way to allocate uninitialized storage in C++ is
std::aligned_storage. The proposed extension doesn't really seem like
an improvement over that.
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
More information about the llvm-dev