MIT Technology Review: An Interview With Bjarne Stroustrup
zz
zz at zz.com
Wed Dec 6 13:45:25 PST 2006
I modified the C++ that was written to reflect the D code more closely:
And now DMD is slightly faster than VS2003 without nedmalloc.
Has anyone managed to compile nedmalloc under DMC?
I don't believe this is a good test, but anyway here it is.
And as I said before D is great and I'll continue using it everyday.
Zz
Results:
----------------------------------------------
VS2003:
Element count: 1000000
ContextSwitches - 122127
First level fills = 0
Second level fills = 0
ETime( 0:00:05.921 ) UTime( 0:00:05.687 ) KTime( 0:00:00.171 )
ITime( 0:00:05.296 )
----------------------------------------------
VS2003 With nedmalloc:
Element count: 1000000
ContextSwitches - 52979
First level fills = 0
Second level fills = 0
ETime( 0:00:02.593 ) UTime( 0:00:02.562 ) KTime( 0:00:00.062 )
ITime( 0:00:02.328 )
----------------------------------------------
DMD:
Element count: 1000000
ContextSwitches - 118191
First level fills = 0
Second level fills = 0
ETime( 0:00:05.281 ) UTime( 0:00:05.203 ) KTime( 0:00:00.031 )
ITime( 0:00:04.875 )
----------------------------------------------
C++ Code:
#include <iostream>
#include <string>
#include <memory>
#include <boost/ptr_container/ptr_vector.hpp>
#include "nedmalloc.h"
void* operator new(size_t sz)
{
void* m = nedmalloc(sz);
if(!m) puts("out of memory");
return m;
}
void operator delete(void* m)
{
nedfree(m);
}
class cpp_element
{
public:
std::string Creator;
std::string CreationDate;
std::string Label;
};
class cpp_root
{
public:
boost::ptr_vector<cpp_element> elements;
};
int main(int argc, char* argv[])
{
cpp_root* _root = new cpp_root();
std::auto_ptr<cpp_root> root(_root);
std::string cd1 = "AAAAAAAAAAAAAAAAAAAAAAAAA";
std::string cd2 = "BBBBBBBBBBBBBBBBBBBBBBBBB";
std::string cd3 = "CCCCCCCCCCCCCCCCCCCCCCCCC";
for(int i = 0; i < 1000000; i++)
{
cpp_element* element = new cpp_element();
element->CreationDate = cd1 + "cd1";
element->Creator = cd2 + "cd2";
element->Label = cd3 + "cd3";
root->elements.push_back(element);
}
printf("Element count: %d\n", root->elements.size());
return 0;
}
----------------------------------------------
D Code:
module test;
import std.stdio;
class d_element
{
public:
char[] Creator;
char[] CreationDate;
char[] Label;
}
class d_root
{
public:
d_element[] elements;
}
int main()
{
char[] cd1 = "AAAAAAAAAAAAAAAAAAAAAAAAA";
char[] cd2 = "BBBBBBBBBBBBBBBBBBBBBBBBB";
char[] cd3 = "CCCCCCCCCCCCCCCCCCCCCCCCC";
d_root root = new d_root();
for(int i = 0; i < 1000000; i++)
{
d_element element = new d_element();
element.CreationDate = cd1 ~= "cd1";
element.Creator = cd2 ~= "cd2";
element.Label = cd3 ~= "cd3";
root.elements ~= element;
}
printf("Element count: %d\n", root.elements.length);
return 0;
}
More information about the Digitalmars-d
mailing list