Quantcast
Viewing all articles
Browse latest Browse all 19

Answer by Wesley for 'printf' vs. 'cout' in C++

TL;DR: Always do your own research, in regard of generated machine code size, performance, readability and coding time before trusting random comments online, including this one.

I'm no expert. I just happened to overhear two co-workers talking about how we should avoid using C++ in embedded systems because of performance issues. Well, interesting enough, I did a benchmark based on a real project task.

In said task, we had to write some config to RAM. Something like:

coffee=hot
sugar=none
milk=breast
mac=AA:BB:CC:DD:EE:FF

Here's my benchmark programs (Yes, I know OP asked about printf(), not fprintf(). Try to capture the essence and by the way, OP's link points to fprintf() anyway.)

C program:

char coffee[10], sugar[10], milk[10];unsigned char mac[6];/* Initialize those things here. */FILE * f = fopen("a.txt", "wt");fprintf(f, "coffee=%s\nsugar=%s\nmilk=%s\nmac=%02X:%02X:%02X:%02X:%02X:%02X\n", coffee, sugar, milk, mac[0], mac[1],mac[2],mac[3],mac[4],mac[5]);fclose(f);

C++ program:

//Everything else is identical except:std::ofstream f("a.txt", std::ios::out);f << "coffee="<< coffee << "\n";f << "sugar="<< sugar << "\n";f << "milk="<< milk << "\n";f << "mac="<< (int)mac[0] << ":"<< (int)mac[1] << ":"<< (int)mac[2] << ":"<< (int)mac[3] << ":"<< (int)mac[4] << ":"<< (int)mac[5] << endl;f.close();

I did my best to polish them before I looped them both 100,000 times. Here are the results:

C program:

real    0m 8.01suser    0m 2.37ssys     0m 5.58s

C++ program:

real    0m 6.07suser    0m 3.18ssys     0m 2.84s

Object file size:

C   - 2,092 bytesC++ - 3,272 bytes

Conclusion: On my very specific platform, with a very specific processor, running a very specific version of Linux kernel, to run a program which is compiled with a very specific version of GCC, in order to accomplish a very specific task, I would say the C++ approach is more suitable because it runs significantly faster and provide much better readability. On the other hand, C offers small footprint, in my opinion, means nearly nothing because program size is not of our concern.

Remeber, YMMV.


Viewing all articles
Browse latest Browse all 19

Trending Articles