Most active commenters

    ←back to thread

    327 points AareyBaba | 12 comments | | HN request time: 1.391s | source | bottom
    Show context
    mwkaufma ◴[] No.46183728[source]
    TL;DR

    - no exceptions

    - no recursion

    - no malloc()/free() in the inner-loop

    replies(9): >>46183820 #>>46183900 #>>46184073 #>>46184113 #>>46184198 #>>46184398 #>>46184472 #>>46184588 #>>46185500 #
    jandrewrogers ◴[] No.46183820[source]
    i.e. standard practice for every C++ code base I've ever worked on
    replies(1): >>46183866 #
    DashAnimal ◴[] No.46183866[source]
    What industry do you work in? Modern RAII practices are pretty prevalent
    replies(2): >>46183904 #>>46184092 #
    jandrewrogers ◴[] No.46183904[source]
    What does RAII have to do with any of the above?
    replies(4): >>46183995 #>>46184069 #>>46184097 #>>46184150 #
    1. WD-42 ◴[] No.46183995[source]
    0 allocations after the program initializes.
    replies(4): >>46184066 #>>46184067 #>>46184129 #>>46184331 #
    2. nicoburns ◴[] No.46184066[source]
    RAII doesn't necessarily require allocation?
    3. Gupie ◴[] No.46184067[source]
    Open a file in the constructor, close it in the destructor. RAII with 0 allocations.
    replies(1): >>46187701 #
    4. tialaramex ◴[] No.46184129[source]
    RAII doesn't imply allocating.

    My guess is that you're assuming all user defined types, and maybe even all non-trivial built-in types too, are boxed, meaning they're allocated on the heap when we create them.

    That's not the case in C++ (the language in question here) and it's rarely the case in other modern languages because it has terrible performance qualities.

    5. jjmarr ◴[] No.46184331[source]
    Stack "allocations" are basically free.
    replies(1): >>46189939 #
    6. dh2022 ◴[] No.46187701[source]
    std::vector<int> allocated and freed on the stack will allocate an array for its int’s on the heap…
    replies(2): >>46189144 #>>46193524 #
    7. usefulcat ◴[] No.46189144{3}[source]
    I've heard that MSVC does (did?) that, but if so that's an MSVC problem. gcc and clang don't do that.

    https://godbolt.org/z/nasoWeq5M

    replies(1): >>46189608 #
    8. menaerus ◴[] No.46189608{4}[source]
    WDYM? Vector is an abstraction over dynamically sized arrays so sure it does use heap to store its elements.
    replies(2): >>46195886 #>>46205474 #
    9. grougnax ◴[] No.46189939[source]
    No. And they're unsafe. Avoid them at all costs.
    10. Gupie ◴[] No.46193524{3}[source]
    Sure, but my point was that RAII doesn't need to involve the heap. Another example would be acquiring abd releasing a mutex.
    11. aw1621107 ◴[] No.46195886{5}[source]
    I think usefulcat interpreted "std::vector<int> allocated and freed on the stack" as creating a default std::vector<int> and then destroying it without pushing elements to it. That's what their godbolt link shows, at least, though to be fair MSVC seems to match the described GCC/Clang behavior these days.
    12. ◴[] No.46205474{5}[source]