4 ms·
0 allocations after the program initializes.
by WD-42 11mo ago
0 allocations after the program initializes.
- nicoburns 11mo agoRAII doesn't necessarily require allocation?
- Gupie 11mo agoOpen a file in the constructor, close it in the destructor. RAII with 0 allocations.
- dh2022 11mo agostd::vector<int> allocated and freed on the stack will allocate an array for its int’s on the heap…
- usefulcat 11mo agoI'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 https://godbolt.org/z/nasoWeq5M
- menaerus 11mo agoWDYM? Vector is an abstraction over dynamically sized arrays so sure it does use heap to store its elements.
- aw1621107 11mo agoI 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.
- deleted 11mo ago[deleted]
- Gupie 11mo agoSure, but my point was that RAII doesn't need to involve the heap. Another example would be acquiring abd releasing a mutex.
- tialaramex 11mo agoRAII 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.
- jjmarr 11mo agoStack "allocations" are basically free.
- grougnax 11mo agoNo. And they're unsafe. Avoid them at all costs.