Thoughts on memory allocation...
Stefan Olsson
stefan@noname4us.com
Thu Jun 27 16:24:00 GMT 2002
Phil Edwards wrote:
>Hi, Stefan. I won't have time to look over the code tonight, but I have
>some quick comments after reading the message.
>
>
>>discussion...) and then tell the containers to use this by wrapping it
>>through the __allocator<> adapter available in stl_alloc.h (i.e. vector<
>>int, __allocator< void, nn4us::nn4us_alloc > > foo;)
>>
>>
> ^^^^
> This should be int.
>
Correct, to much copy and paste here ;-)
>>- There seems to something "missing" in the __allocator<> code since I
>>had to add the operator == and != in order to get basic_string<> to
>>compile, this does however not happen if I try to compile with
>>malloc_allocator which is part of stl_alloc.h - why I don't know...
>>
>>
>
>Which version of the libstdc++ sources are you using? There's nothing
>called malloc_allocator (unless you meant __malloc_alloc_template).
>The operators for __allocator are template functions, defined around line
>800 of stl_alloc.h in current sources.
>
I am running gcc3.1 so i guess thats the 3.0.97 code...
Yes, another typo - it's the __malloc_alloc_template I'm talking about...
...I guess that the only thing needed really is a comment that if you
"roll your own allocator" and wrap that through __allocator<> you need
to define your own operator == and != (see my header file) - however I
don't know if this is by design?
Basically try to comment out the code in my header file and compile a
small app using basic_string:
#include <string>
#include "nn4us_alloc.hpp"
using namespace std;
int main()
{
std::basic_string< char, std::char_traits< char >,
std::__allocator< char, nn4us::nn4us_alloc > > foo1;
std::basic_string< char, std::char_traits< char >,
std::__allocator< char, nn4us::nn4us_alloc > > foo2 = foo1;
return 0;
}
When trying to compile this without the == and != declarations I get:
g++ -pthread -O2 -o test.o -c test.cpp
In file included from /usr/local/include/g++-v3/bits/basic_string.tcc:194:
/usr/local/include/g++-v3/bits/stl_alloc.h: In function `bool
std::operator==(const std::__allocator<_Tp, _Alloc>&, const
std::__allocator<_Tp, _Alloc>&) [with _Tp = char, _Alloc =
nn4us::nn4us_alloc]':
/usr/local/include/g++-v3/bits/basic_string.h:174: instantiated from
`_CharT* std::basic_string<_CharT, _Traits, _Alloc>::_Rep::_M_grab(const
_Alloc&, const _Alloc&) [with _CharT = char, _Traits =
std::char_traits<char>, _Alloc = std::__allocator<char,
nn4us::nn4us_alloc>]'
/usr/local/include/g++-v3/bits/basic_string.h:208: instantiated from
`std::basic_string<_CharT, _Traits,
_Alloc>::_Alloc_hider::_Alloc_hider(_CharT*, const _Alloc&) [with _CharT
= char, _Traits = std::char_traits<char>, _Alloc =
std::__allocator<char, nn4us::nn4us_alloc>]'
/usr/local/include/g++-v3/bits/basic_string.tcc:194: instantiated from
`std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const
std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char,
_Traits = std::char_traits<char>, _Alloc = std::__allocator<char,
nn4us::nn4us_alloc>]'
test.cpp:13: instantiated from here
/usr/local/include/g++-v3/bits/stl_alloc.h:758: no match for `const
nn4us::nn4us_alloc& == const nn4us::nn4us_alloc&' operator
/Stefan
--
Life is like a 10 speed bicycle. Most of us have gears we never use.
More information about the Libstdc++
mailing list