[llvm-dev] Skipping construction/destruction of stack allocated objects (original) (raw)

Alexandre Isoard via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 15 18:09:32 PST 2019


Hello,

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 foo[64][64] attribute((uninitialized)); // does not need to generate a zeroinitializer loop here somefunction(foo); // does not need to generate a destructor loop here (std::complex 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?

I'm worried about the fact that for non-POD types it is not safe to ignore that attribute, which probably means using an attribute is not a good fit...

-- Alexandre Isoard -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190115/d0e22529/attachment.html>



More information about the llvm-dev mailing list