Uma prova de performance

Sempre está sendo dito e defendido que perfomance é fundamental. Esta performance depende de outros fatores além da otimização do código. Um deles é a escolha da tecnologia e da linguagem de programação.

Estou analisando o código do Cos – link que indiquei no último post, e ao compilar o primeiro dos programas fiquei espantado com a diferença de performance entre C e C++.

O C neste caso parece ser cerca de 5x (no meu teste) mais rápido do que C++.

/* Em C */
AB    : dynamic_cast<A*>(b) = 3218961676, iter = 62500000/sec
DCABBA: dynamic_cast<A*>(b) = 3218961600, iter = 21739130/sec
DCABBA: dynamic_cast<C*>(c) = 3218961556, iter = 21739130/sec

/* Em C++ */
AB    : dynamic_cast<A*>(b) = 3214284680, iter = 12048192/sec
DCABBA: dynamic_cast<A*>(b) = 3214284604, iter = 6622516/sec
DCABBA: dynamic_cast<C*>(b) = 3214284560, iter = 3267973/sec

O link dos fontes pode ser baixado daqui e faz uma demonstração de implementação de padrões orientados à objetos com o C.

Como dito pelo autor:

C++ Object Model is a long paper (see object_model.html) started years ago which I unfortunately never finished (about 25% achieved), but is enough to understand the overall. It comes with a complete example in C (see cmd_c.sh) and C++ (see cmd_cpp.sh) which describes one way to implement the C++ object model (i.e. the g++’s object model). It is addressed to advanced (and motivated ;-) C and C++ programmers who have some interest in the C++ object model, so I put it here for curiosity. It may give you some hints about the implementation complexity corresponding to the management of dynamic types within constructors and destructors (i.e. intermediate vtbl) and covariant and contravariant types in the presence of multiple and virtual inheritance (i.e. thunks). I found interesting that my naive implementation of dynamic_cast is about x3 faster than the dynamic_cast provided by g++ ;-)

Nota adicional: o compilador utilizado é o gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) e o programa foi rodado num Core 2/2.2 GHz/3Gb Ram

Deixe um comentário