Some Performance Experiments for Simple Data Structures (2011) [pdf]
lsub.org
lsub.org
Of course they can get away with it on most systems, because most memory allocators don't have that kind of naive implementation. They may do a geometric growth policy automatically; they may switch to grabbing memory from the OS's virtual memory system for allocations above a certain size; they can do all sorts of things that have the convenient side-effect of making the constant-growth algorithm here more efficient. But it shouldn't come as any great surprise that things can get weird on some systems with different memory management, when they've taken such an unusual approach to their array resizing.
Another thing I used to bring up was using in-order execution and compiler-directed scratchpads (w/ option for manual) to get more predictable performance. Esp for real-time or preventing covert channels.
https://listserv.tamu.edu/cgi-bin/wa?A2=ind1105&L=PIVOT&F=&S...
"From: Bjarne Stroustrup..."
That is, in practice, results from complexity theory seems to be totally neglected.
In our opinion, what happens is that software is so complex, and there are so many
layers of software underneath the application code, that it is not even
clear which data structures are better; at least for the simple case we describe
here.
As always, trust but verify(profile).In principle, I applaud the initiative to put the sacred theories given from above to the test. We need more of this and much earlier. Every CS 101 course should be presenting something similar.
On the other hand, what where this guys expecting? They are testing a LinkedList(TM) for goodness sake!!! Even if you assume hardware that follows the abstract theoretical machine of the C standard to the letter, all the toying around with pointers should be a good predictor that things are going to be slow regardless of what Complexity Theory says. And, speaking of Complexity Theory, with the samples sizes they were using, all the Big Oh analysis does not apply. The limits of the equations are irrelevant, the one with the lowest fixed cost wins!
So, I find extremelly annoying all that mumbo-jumbo about how the so called complexity of software and the processor caches, etc, make analysis impossible. It is not that difficult; the guy who does not overthink stuff and packs everything close enough to cause the least cache misses wins (and the idiot that needlessly spreads data around and uses indirection everywhere looses).
I follow up article that compares slight variants of the same data structure to take advantage of modern hardware would provide great insights!!!
In the end I put my Big O knowledge in the drawer and stripped linked lists from the program I was working on, and got the 100x improvement in overall performance I was looking for.
I had also used a linked list of characters to represent strings to iterate through them one by one. This was very slow compared to iterating through an array.
Linked-lists were supposed to be O(1) inserting at the head, and O(n) iterating through it. However, it's no match against array O(1) assignment and O(n) array iteration.
Seriously?
edit: there is full code in the end and it is same too.