* 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?


|