Re: Do you use a garbage collector (java vs c++ difference in "new")
kepeng@gmail.com wrote:
It's so unfair!
But it doesn't matter much.
Razii $B<LF;!'(B
On Fri, 11 Apr 2008 03:35:27 +0300, Juha Nieminen
<nospam@thanks.invalid> wrote:
Razii wrote:
In C++, each "new" allocation request
will be sent to the operating system, which is slow.
That's blatantly false.
Well, my friend, I have proven you wrong. Razi has been victorious
once again :)
Time: 2125 ms (C++)
Time: 328 ms (java)
--- c++--
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
class Test {
public:
Test (int c) {count = c;}
This is assignment after initialization.
It should be like this:
Test(int c) : count(c) {}
A decent optimizer will recognize this and generate identical code for
int types.
virtual ~Test() { }
int count;
};
int main(int argc, char *argv[]) {
clock_t start=clock();
for (int i=0; i<=10000000; i++) {
Test *test = new Test(i);
if (i % 5000000 == 0)
cout << test;
The memory you allocated is not released, so every new() is
actually a allocation operation to libc.
When the heap is empty, a new page of memory is allocated from OS.
The really unfair thing is that you would never ever do anything like
this in C++. Why would any application allocate ten million int sized
objects separately?
std::vector<Test> test(10000001);
Bo Persson