Hacker News new | past | comments | ask | show | jobs | submit login

why would it allocate ? creating objects does not trigger allocations most of the time. The only stack space used is the internal state of the functor used, which is a lot of time empty (and won't even exist anymore by the time the compiler has optimized your code).

eg. look here: https://godbolt.org/g/AdLAi1 there's not a single new / malloc / whatever




Now I know that there's a stack allocation for the functor. Not all platforms have Sufficiently Smart Compilers; I've got code relying on SDCC and TCC, for instance. :)

That's what I'm getting at, there's this whole new suite of functionality that is sort of opaque to me, whereas I'm used to having a grasp of what's going on at-a-glance when working with C and C++98. I'll just have to spend a weekend working with it.


> Not all platforms have Sufficiently Smart Compilers; I've got code relying on SDCC and TCC, for instance. :)

I'm pretty sure that it's not a matter of compiler brightness; the C and C++ standards are both pretty explicit about when the automatic and dynamic storages are used. If anything, I guess that it would be harder for compilers to allocate such things on the heap.

I checked and tcc doesn't allocate anything for instance for this code; neither does gcc 4.4 in c++98 mode :

    int main()
    {
      struct foo {
        int a, b, c;
        char x[3000];
      } f;
    }


You're basically confirming my supposition that I'll need to spend time reviewing the new C++ standards. ;)


I'd really like to know your definition of "new". Everything I said was already true thirty years ago.


Everything new in the C++11, 14 and 17 standards.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: