Earlier quoted context omitted.
A surprisingly large number of companies have their own STL implementations from Investment Banks to Telecoms companies. Often because they're doing funky things (often related to memory allocation) which would be outright impossible to do in languages like Java or C#.
I have never seen anyone mix their custom memory manager with STL. Also, who said anything about Java or C#?
EA open sources their internal version of STL
21–30 of 37 posts
Re: EA open sources their internal version of STL
#22This is why game companies use C++. They've already reimplemented it internally and don't ever want to do that again.
I imagine most STL classes still don't fit game programming paradigms. My very first experience with this was using vectors to store vertices as an intermediary before sticking them into a vertex buffer. Granted, my math was awful, but the memory overhead was absurd. I constantly find myself over using STL in my programs because of how easy it is, then redoing it to use standard C/C++ arrays, linked lists, etc. for e…
Re: EA open sources their internal version of STL
#23Earlier quoted context omitted.
You're being more tolerant. When you're building a high performance game engine for fixed target hardware, the last thing you want is to be doubling up the size of your arrays.
If you know before the allocation how much entries it must hold at maximum, you can give an std::vector that information. There is simply no case where you are forced to require more memory with an std::vector but not with a manual implementation.
If you know the vector isn't going to be enormous you can swap two of those pointers for unsigned integers, cutting overhead down to 16 bytes total. If you know more about your data and usage patterns you can probably get it further. For very small vectors of largely static data you might trade one of the integers for linear-time insertion and deletion. If capacity is known at compile-time you can make it part of the type. If you know that size() will always equal capacity() you can get rid of the size int.
It's also worth noting that you don't have to double your storage on every reallocation to avoid linear-time insertions - you just have to multiply it by some constant that's greater than one. If you don't know how many reallocs you're going to do, but you know that it isn't many, you might want to just multiply your capacity by 1.1 every time to avoid a lot of wasted space. Assuming, of course, that you're happy with bringing floating point computation in, and that you've thought about how you're going to increase the capacity of a vector of size 1...
Re: EA open sources their internal version of STL
#24Earlier quoted context omitted.
I have never seen anyone mix their custom memory manager with STL. Also, who said anything about Java or C#?
Right, they have a custom STL because they want to have their custom memory management.
Incidentally, I asked someone about memory management in an interview for a C++ position. He said he wrote his own memory manager (object pool, basically), and never even bothered to use "new" or "delete".
Personally, I'm sticking to Haskell...
Re: EA open sources their internal version of STL
#25Earlier quoted context omitted.
I have never seen anyone mix their custom memory manager with STL. Also, who said anything about Java or C#?
Right, they have a custom STL because they want to have their custom memory management.
And the reason you don't use garbage collection is because real-time games can't afford a GC pause.
Re: EA open sources their internal version of STL
#26Re: EA open sources their internal version of STL
#27What's their reason for open sourcing it?
Re: EA open sources their internal version of STL
#28Earlier quoted context omitted.
I have never seen anyone mix their custom memory manager with STL. Also, who said anything about Java or C#?
STL is more or less designed to support custom memory allocation, I would say that half of it's complexity comes from this.
Re: EA open sources their internal version of STL
#29Earlier quoted context omitted.
Right, they have a custom STL because they want to have their custom memory management.
The reason you need to really care about memory management in game development is because most of the consoles don't have virtual memory. Once you run out (and you don't have that much), your game stops working. It's very similar to embedded system / real-time programming in this way. So you need to plan out how much space everything will use in advance, basically. Lots of fixed-sized buffers and pool allocators. And…
You also don't want your code to fail after weeks of runtime with an alloc error, if it's going to run out of memory you want it to fail at the start.
Re: EA open sources their internal version of STL
#30Earlier quoted context omitted.
I imagine most STL classes still don't fit game programming paradigms. My very first experience with this was using vectors to store vertices as an intermediary before sticking them into a vertex buffer. Granted, my math was awful, but the memory overhead was absurd. I constantly find myself over using STL in my programs because of how easy it is, then redoing it to use standard C/C++ arrays, linked lists, etc. for e…
Any sane implementation of std::vector is probably going to have three pointers of overhead, and might allocate twice as much memory as required in the worst case when you push a bunch of objects into it. That doesn't seem totally absurd to me - was yours much worse, or am I just being more tolerant of it?
Somebody said computer science is solving yesterdays problems on tomorrows hardware, the rest of science is solving tomorrows problems on yesterdays hardware