Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ > Re: Strange res...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 3 of 5 Topic 43761 of 48417
Post > Topic >>

Re: Strange result

by "Alf P. Steinbach" <alfps@[EMAIL PROTECTED] > Mar 9, 2008 at 11:35 AM

* Paul Brettschneider:
> Hi,
> 
> Alf P. Steinbach wrote:
> 
>> 1. The program below should theoretically not run on my old & clunky
>> machine,
>> since theoretically it allocates 2 to 4 GB.  In reality, according to
>> Windows
>> Task Manager, it allocates only some 20 MB tops.  And runs fine, though
>> slow...
>>
>> 2. With MSVC, and/or with 10.000 or fewer iterations and Op vector
>> elements, the inefficient reference strings are faster than std::string
>> string, as expected. On my machine, with g++ and 100.000 iterations,
the
>> opposite happens, and the
>> machine trashes on allocation and deallocation for the ref strings.  I
>> guess on a modern machine that limit must be higher (yet another factor
of
>> 10?), but I'm interested whether (1) this can be reproduced, and (2)
>> whether anyone has any explanation (at a guess something causes a lot
of
>> memory to be allocated, but it doesn't show up in Task Manager).
> 
> I think you're missing copy constructors, see below:
> 
>> Disclaimer: this is late for me, so thinking box not entirely sharp...
>>
>>
>> #include    <boost/progress.hpp>
>> #include    <boost/shared_ptr.hpp>
>> #include    <iostream>
>> #include    <ostream>
>> #include    <vector>
>> #include    <string>
>>
>> class RefString
>> {
>> private:
>>      boost::shared_ptr<std::string>  myString;
>> public:
>>      RefString( size_t n, char c )
>>      : myString( new std::string( n, c ) )
>>      {}
> 
> // Missing copy constructor for non-PODs:
>      RefString(const RefString &s)
>      : myString(s.myString)
>      { };
>      RefString &operator=(const RefString &s)
>      { myString = s.myString; return *this; };

Nope, these are effectively the same as those generated automatically.


>> };
>>
>> template< class String >
>> struct Op_
>> {
>>      String                  s;
>>      std::vector<String>     v;
>>
>>      Op_(): s( 200, ' ' ), v( 100, s ) {}
> 
> // Missing copy constructor for non-PODs:
>      Op_(const Op_ &o)
>      : s(o.s), v(o.v) { };
>      Op_ &operator=(const Op_ &o)
>      { s = o.s; v = o.v; return *this; };

Ditto, no need to reproduce what the language provides automatically.

Except if there's some bug in g++...


[snip]
> 
> HTH,
> Paul

Well, it could have. :-)  So thanks.


Cheers,

- Alf

-- 
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
 




 5 Posts in Topic:
Strange result
"Alf P. Steinbach&qu  2008-03-09 09:40:37 
Re: Strange result
Paul Brettschneider <p  2008-03-09 10:50:24 
Re: Strange result
"Alf P. Steinbach&qu  2008-03-09 11:35:56 
Re: Strange result
Paul Brettschneider <p  2008-03-09 12:23:58 
Re: Strange result
=?UTF-8?B?RXJpayBXaWtzdHL  2008-03-09 11:06:43 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri Nov 21 10:10:55 CST 2008.