[Mono-list] offtopic, but cool
Jonathan Pryor
jonpryor@vt.edu
Thu, 13 May 2004 06:54:41 -0400
It just occurred to me, but this test is really unfair to C++.
std::list is a linked-list, requiring a heap allocation for each node in
the list. ArrayList and List<T> both use arrays for their internal
storage, and thus would require far fewer allocations.
I would suggest re-testing the C++ program, but use std::vector instead
of std::list. std::vector is the array-based implementation, which is
supposed to provide (amortized) O(1) append time. (Of course, std::list
also provides O(1) append and insert time, but the heap allocation per
node requirement is a killer, as opposed to the probable log(n) heap
allocations an array would require, assuming you don't pre-allocate the
array.)
Which reminds me: running the test with the List/vector pre-allocated
would be interesting, as it would help to remove the C++ heap allocator
and the GC from the performance equation, allowing us to see a better
comparison between the two models.
- Jon
On Wed, 2004-05-12 at 07:56, Cory Nelson wrote:
> Just got done installing the VS.NET 2005 preview and did a small test.
>
> I compared an ArrayList of Rectangles to a List<Rectangle>, and timed
> inserting 1mil rects into each. I also wrote an equivalent c++ app.
> Got some interesting results:
>
> ArrayList: 265ms
> List<Rectangle>: 62ms
> list<rect>: 141ms
>
> So it seems with generics .NET is finally faster than c++ (at least,
> in this case).