| 1 |
Content |
| 2 |
|
| 3 |
Q1 About STLport and availability |
| 4 |
|
| 5 |
Q1.0 What is STLport? |
| 6 |
Q1.1 What are the benefits from using STLport? |
| 7 |
Q1.2 What versions of STLport are available? |
| 8 |
Q1.3 Where is the documentation or user guide? |
| 9 |
Q1.4 What is the version policy? |
| 10 |
|
| 11 |
Q2 General |
| 12 |
|
| 13 |
Q2.0 Do I need a C++ compiler? |
| 14 |
Q2.1 Do I need runtime libraries from C++ compiler? |
| 15 |
Q2.2 Can I use containers and algorithms from STLport and iostreams from |
| 16 |
library that ship with my compiler? |
| 17 |
Q2.3 Can I mix STL implementations in my project? |
| 18 |
Q2.4 When I switch to STLport in my application, I get errors. Is STLport |
| 19 |
so bad? |
| 20 |
|
| 21 |
Q3 Building |
| 22 |
|
| 23 |
Q3.0 On my XXXX Linux n.n g++ headers are in /usr/include/g++, but they |
| 24 |
are looked for in /usr/include/3.3.1. Is it a STLport bug? |
| 25 |
Q3.1 Do I need to build library to use STLport? |
| 26 |
Q3.2 During library compilation with MS VC++ 6.0 I see following error report:... |
| 27 |
Q3.3 Has anybody succeeded building STLport on OS Y with compiler K n.n? |
| 28 |
Q3.4 Does STLport support cross-compilation? |
| 29 |
|
| 30 |
Q4 Installation |
| 31 |
|
| 32 |
Q4.1 I tried "make -f gcc.mak install", but it install nothing into |
| 33 |
/usr/local/. How I can install headers into /usr/local/include and |
| 34 |
libs into /usr/local/lib? |
| 35 |
|
| 36 |
Q5 Bug report |
| 37 |
|
| 38 |
Q5.0 I found a bug, how can I report about it? |
| 39 |
|
| 40 |
Q6 Design |
| 41 |
|
| 42 |
Q6.0 In STLport, files like locale.h, setjmp.h, stdlib.h, etc., |
| 43 |
do nothing except include native headers. Why are these files present in STLport? |
| 44 |
Q6.1 Is STLport a replacement for headers and libraries that shipout |
| 45 |
with compiler? |
| 46 |
Q6.2 My tool detects memory leaks in applications with STLport. Is this leak |
| 47 |
from STLport? |
| 48 |
Q6.3 When running unit tests, I have errors in LocaleTest test fixture, how bad |
| 49 |
is it? |
| 50 |
Q6.4 set or multiset iterators are immutable like const_iterators, why ? |
| 51 |
|
| 52 |
Answers |
| 53 |
|
| 54 |
======================================================================== |
| 55 |
|
| 56 |
Q1.0 What is STLport? |
| 57 |
A1.0 STLport is an implementation of the C++ Standard Library, as described |
| 58 |
in the INTERNATIONAL STANDARD ISO/IEC 14882:1998(E) and latest |
| 59 |
ISO/IEC 14882:2003(E). |
| 60 |
|
| 61 |
======================================================================== |
| 62 |
|
| 63 |
Q1.1 What are the benefits from using STLport? |
| 64 |
|
| 65 |
A1.1 |
| 66 |
- For multiplatform/multicompilers project a coherent Standard Library |
| 67 |
implementation. |
| 68 |
- An easy to use STL safe mode detecting bad use of containers and |
| 69 |
iterators. |
| 70 |
- Some original optimizations: template expression for string |
| 71 |
concatenation, short string optimization, move semantic for STL containers |
| 72 |
combination like vector of vector, an efficient std::allocator. |
| 73 |
|
| 74 |
======================================================================== |
| 75 |
|
| 76 |
Q1.2 What versions of STLport are available? |
| 77 |
|
| 78 |
A1.2 |
| 79 |
|
| 80 |
======================================================================== |
| 81 |
|
| 82 |
Q1.3 Where is the user guide? |
| 83 |
|
| 84 |
A1.3 There is no real user guide for the moment. You can find some information |
| 85 |
in README files in doc folder. As STLport is a C++ Standard library |
| 86 |
implementation you might find information you need at the following |
| 87 |
locations: |
| 88 |
- The ISO/IEC 14882:2003 document you can buy for a very cheap price. |
| 89 |
- For STL containers you can use SGI documentation (http://www.sgi.com/tech/stl/). |
| 90 |
Beware however, STL described in this document is not identical to the |
| 91 |
Standardized version described in ISO/IEC. This documentation can be very |
| 92 |
useful for STLport extensions like hash containers (hash_map, hash_set...) |
| 93 |
- You can also use the documentation coming with your compiler as most |
| 94 |
of the information will also apply to STLport. Take care to description |
| 95 |
reported as 'implementation specific'. |
| 96 |
|
| 97 |
======================================================================== |
| 98 |
|
| 99 |
Q1.4 What is the version policy? |
| 100 |
|
| 101 |
A1.4 STLport version information contains three numbers like '5.1.0'. '5' |
| 102 |
is the major version number, '1' is the minor and '0' is the patch level. |
| 103 |
Policy for this numbers are: |
| 104 |
- changes in major version number: radical modification, new era. |
| 105 |
- changes in minor version number: significant changes, new features, |
| 106 |
changes in interface part; switching to an STLport library with a different |
| 107 |
minor version require recompilation of all modules depending on it. |
| 108 |
- changes in patch level: bugfixes; we keep in mind binary compatibility, |
| 109 |
but really can't strongly guarantee it; switching to an STLport library |
| 110 |
with different patch level do not require rebuild of modules---rebuilding and |
| 111 |
installing the STLport libraries should work; however, as STLport contains |
| 112 |
a lot of template code, you should pay attention to fact that all you modules |
| 113 |
was build with SAME STLport headers---otherwise problems possible; |
| 114 |
recompilation of one part with only rebuilding STLport might not be enough |
| 115 |
to get all the fixes in your application so even in this case rebuilding |
| 116 |
your modules is advised. |
| 117 |
|
| 118 |
======================================================================== |
| 119 |
|
| 120 |
|
| 121 |
Q2.0 Do I need a C++ compiler? |
| 122 |
|
| 123 |
A2.0 STLport is a C++ library. So the answer is 'yes, you do'. |
| 124 |
|
| 125 |
======================================================================== |
| 126 |
|
| 127 |
Q2.1 Do I need runtime libraries from C++ compiler? |
| 128 |
|
| 129 |
A2.1 In any case, the C++ language support from compiler is required |
| 130 |
for STLport (operators new, delete, RTTI, exceptions support). That's why |
| 131 |
in most cases you need some runtime libraries from the C++ compiler. |
| 132 |
|
| 133 |
======================================================================== |
| 134 |
|
| 135 |
Q2.2 Can I use containers and algorithms from STLport and iostreams from |
| 136 |
the library that ships with my compiler? |
| 137 |
|
| 138 |
A2.2 The short answer is 'No'. |
| 139 |
|
| 140 |
Indeed co-existence of two implementations possible, but this required |
| 141 |
a lot of knowledge as about both implementations, as about compiler and |
| 142 |
linkage. This issues should be taken into account both within STL library and |
| 143 |
during library usage. In common you can't use both implementation |
| 144 |
in the same namespace. So you should separate STL implementations into |
| 145 |
different namespaces. But due to absent of compilers that has full-featured |
| 146 |
support of Argument Dependent Lookup (ADL) (aka Koenig Lookup), you have no |
| 147 |
possibilty to select one or another implementation. |
| 148 |
|
| 149 |
ADL problem. |
| 150 |
|
| 151 |
In wrapper mode, all std references are replaced, thanks a simple macro, |
| 152 |
by the stlp_std namespace. Everything from the native compiler std namespace |
| 153 |
is injected to the stlp_std namespace with many using std::* directives. |
| 154 |
|
| 155 |
The problem arise when you specialized a standard class for one of your |
| 156 |
user types. You do it within the std namespace that, in wrapper mode |
| 157 |
becomes the stlp_std namespace. Then this specialization is just invisible |
| 158 |
from the native std namespace and won't be used. |
| 159 |
|
| 160 |
Things are somewhat worse: the problem arises even without any explicit |
| 161 |
specializations. It is not a bug, but the fact that old compilers just |
| 162 |
did not tried to find functions in the namespaces where arguments' classes |
| 163 |
are defined (indeed no compilers with full-featured support of ADL yet). |
| 164 |
|
| 165 |
Mix implementation via library. |
| 166 |
|
| 167 |
Let's reduce all the complexity of STLport to some very simple example: |
| 168 |
|
| 169 |
namespace std { |
| 170 |
|
| 171 |
class string |
| 172 |
{ |
| 173 |
public: |
| 174 |
class iterator { }; |
| 175 |
|
| 176 |
iterator begin(); |
| 177 |
iterator end(); |
| 178 |
}; |
| 179 |
|
| 180 |
template<class I, class T> |
| 181 |
void find(I begin, I end, T value); |
| 182 |
|
| 183 |
} // namespace std |
| 184 |
|
| 185 |
|
| 186 |
namespace stlport { |
| 187 |
|
| 188 |
using std::string; |
| 189 |
|
| 190 |
template<class I, class T> |
| 191 |
void find(I begin, I end, T value); |
| 192 |
|
| 193 |
void gee() |
| 194 |
{ |
| 195 |
string s; |
| 196 |
find(s.begin(), s.end(), 10); |
| 197 |
} |
| 198 |
|
| 199 |
} // namespace stlport |
| 200 |
|
| 201 |
|
| 202 |
When a compiler supporting ADL finds the call to `find' within gee() function |
| 203 |
it should examine both namespace `stlport' and namespace `std' for |
| 204 |
the presence of `find'. It is caused by the fact that s.begin() returns |
| 205 |
object of type `std::string::iterator' which obviously defined in namespace |
| 206 |
`std' and the heart of ADL is finding functions not only within namespaces |
| 207 |
where the call is being made but also in the namespaces where the classes |
| 208 |
of arguments are defined... |
| 209 |
|
| 210 |
So, in our example compiler ends with two templates satisfying the call |
| 211 |
`find(s.begin(), s.end(), 10)': `std::find' and `stlport::find'. |
| 212 |
Since compiler can not choose any one of them it reports ambiguity. |
| 213 |
|
| 214 |
There is another aspect of mix implementations. |
| 215 |
Let's consider following code: |
| 216 |
|
| 217 |
a.h: |
| 218 |
|
| 219 |
#include <string> |
| 220 |
|
| 221 |
class A { |
| 222 |
public: |
| 223 |
A() {} |
| 224 |
|
| 225 |
void push( const string s ); |
| 226 |
|
| 227 |
string _str; |
| 228 |
}; |
| 229 |
|
| 230 |
a.cpp: |
| 231 |
|
| 232 |
#include "a.h" |
| 233 |
|
| 234 |
void A::push( const string s ) |
| 235 |
{ |
| 236 |
_str = s; |
| 237 |
} |
| 238 |
|
| 239 |
|
| 240 |
b.cpp: |
| 241 |
|
| 242 |
#include "a.h" |
| 243 |
|
| 244 |
string s; |
| 245 |
A a; |
| 246 |
|
| 247 |
void gee() |
| 248 |
{ |
| 249 |
a.push( s ); |
| 250 |
} |
| 251 |
|
| 252 |
Now build library from a.cpp with string implementation Impl1; |
| 253 |
then build application with b.cpp that use string implementation Impl2, |
| 254 |
and link with mentioned above library. Compiler will pass. Linker may |
| 255 |
pass too. But your application will crash (or randomly crash) either on |
| 256 |
call a.push, or on assignment _str = s. This is evident here, but not |
| 257 |
evident in real applications. |
| 258 |
|
| 259 |
The conclusion is: "Using Wrapper mode is very hard and we removed support |
| 260 |
for it". |
| 261 |
|
| 262 |
======================================================================== |
| 263 |
|
| 264 |
Q2.3 Can I mix STL implementations in my project? |
| 265 |
|
| 266 |
A2.3 Yes you can but each implementations will rely in its own namespace |
| 267 |
with no direct interaction between them. You will first need to correctly |
| 268 |
configure STLport thanks to 2 macros in user_config.h file. |
| 269 |
- _STLP_DONT_REDEFINE_STD tells STLport not to define the std macro that is |
| 270 |
used to replace std reference in your code with STLport namespace. |
| 271 |
- _STLP_WHOLE_NATIVE_STD tells STLport to always include native header each |
| 272 |
time a Standard header is included in your code. |
| 273 |
|
| 274 |
Here is a small code sample that do not require any modification in STLport |
| 275 |
install: |
| 276 |
|
| 277 |
#define _STLP_DONT_REDEFINE_STD |
| 278 |
#define _STLP_WHOLE_NATIVE_STD |
| 279 |
|
| 280 |
#include <string> |
| 281 |
|
| 282 |
void foo() |
| 283 |
{ |
| 284 |
std::string std_str("std"); |
| 285 |
stlport::string stlport_str("stlport"); |
| 286 |
stlport_str.append(std_str.begin(), std_str.end()); |
| 287 |
// Following is wrong because there is no assignment |
| 288 |
// operator for stlport::string on std::string. |
| 289 |
//std_str = stlport_str; |
| 290 |
} |
| 291 |
|
| 292 |
Note: You can use 'std' iterators from native implementation in STLport |
| 293 |
template methods like in the 'stlport_str.append' method call above because |
| 294 |
STLport is adding the necessary code to interpret native iterators like |
| 295 |
STLport iterators. You won't be able however to do the opposite as native |
| 296 |
implementation do not know anything about STLport iterators. |
| 297 |
|
| 298 |
|
| 299 |
======================================================================== |
| 300 |
|
| 301 |
Q2.4 When I switch to STLport in my application, I get errors. Is STLport |
| 302 |
so bad? |
| 303 |
|
| 304 |
A2.4 Before you post such message, please, check STLport WHITHOUT YOUR code: |
| 305 |
- build STLport library |
| 306 |
- build STLport unit tests |
| 307 |
- run STLport unit tests |
| 308 |
If any of above steps fail, please, make sure that you carefully followed |
| 309 |
build instructions (in most cases you definitely should reread |
| 310 |
instructions and check that you correctly unpack archive in case you see |
| 311 |
'file not found' message). Build instructions you can found in files |
| 312 |
INSTALL, doc/README.*, build/README*, build/test/unit/README*. |
| 313 |
If you are sure, submit bug report here: |
| 314 |
https://sourceforge.net/projects/stlport |
| 315 |
Don't forget to describe your operational environment, compiler version and |
| 316 |
STLport version. |
| 317 |
|
| 318 |
======================================================================== |
| 319 |
|
| 320 |
Q3.0 On my XXXX Linux n.n g++ headers are in /usr/include/g++, but they |
| 321 |
are looked for in /usr/include/3.3.1. Is it a STLport bug? |
| 322 |
|
| 323 |
A3.0 Path to native compiler headers for GCC correspond to default path |
| 324 |
after build/install compiler (i.e. paths from compiler origo). |
| 325 |
Package maintainers can use any path by own taste---we can't satisfy |
| 326 |
variety of distributions/packages. |
| 327 |
|
| 328 |
So you can: |
| 329 |
- fix path in stlport administration config file stlport/stl/config/host.h, |
| 330 |
see _STLP_NATIVE_INCLUDE_PATH macro and related. |
| 331 |
- create a link to the native compiler headers like expected by STLport |
| 332 |
- make request to package maintainer |
| 333 |
- build and install compiler |
| 334 |
|
| 335 |
Note: Starting with version 5.2, STLport uses the include_next preprocessing |
| 336 |
command to access native headers so you shouldn't experiment this problem |
| 337 |
anymore when this feature is supported by your compiler preprocessor. |
| 338 |
|
| 339 |
======================================================================== |
| 340 |
|
| 341 |
Q3.1 Do I need to build a library to use STLport? |
| 342 |
|
| 343 |
A3.1 You may omit usage (and, thus building) STLport library, but in this |
| 344 |
case you can't use iostreams, locale, complex. |
| 345 |
|
| 346 |
======================================================================== |
| 347 |
|
| 348 |
Q3.2 During library compilation with MS VC++ 6.0 I see following error report: |
| 349 |
|
| 350 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1123) : error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed |
| 351 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1121) : see declaration of 'InterlockedIncrement' |
| 352 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1130) : error C2733: second C linkage of overloaded function 'InterlockedDecrement' not allowed |
| 353 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1128) : see declaration of 'InterlockedDecrement' |
| 354 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1138) : error C2733: second C linkage of overloaded function 'InterlockedExchange' not allowed |
| 355 |
C:\Program Files\Microsoft SDK\Include\.\winbase.h(1135) : see declaration of 'InterlockedExchange' |
| 356 |
|
| 357 |
A3.2 You have a Platform SDK installed. Uncomment line |
| 358 |
#define _STLP_NEW_PLATFORM_SDK 1 |
| 359 |
in the file stlport/stl/config/user_config.h. There is no way to detect SDK |
| 360 |
presence during preprocessor stage, which is why you have to make this |
| 361 |
change manually. |
| 362 |
|
| 363 |
======================================================================== |
| 364 |
|
| 365 |
Q3.3 Has anybody succeeded building STLport on OS S with compiler K n.n? |
| 366 |
|
| 367 |
A3.3 See report about results of regression tests here: build/test/unit/STATUS. |
| 368 |
|
| 369 |
======================================================================== |
| 370 |
|
| 371 |
Q3.4 Does STLport support cross-compilation? |
| 372 |
|
| 373 |
A3.4 In case of GCC, use something like following sequence: |
| 374 |
|
| 375 |
(./configure --target=${CROSSTARGET}; cd build/lib; \ |
| 376 |
export PATH=${BASECROSS}/bin:${PATH}; make -f gcc.mak install-release-shared) |
| 377 |
|
| 378 |
where CROSSTARGET is GCC's cross prefix (something like 'i586-pc-linux-gnu', |
| 379 |
if C++ cross compiler named as 'i586-pc-linux-gnu-c++'), BASECROSS is base of |
| 380 |
cross-compiler's location (i.e. ${BASECROSS}/bin in case above is a location |
| 381 |
of 'i586-pc-linux-gnu-c++'). |
| 382 |
|
| 383 |
In case of non-GCC crossecompilers, we need hands-made target system identification. |
| 384 |
The sample of such compiler (supported by STLport) is MetroWerks Codewarrior |
| 385 |
for Novell Netware (mwccnlm). |
| 386 |
|
| 387 |
======================================================================== |
| 388 |
|
| 389 |
Q4.1 I tried "make -f gcc.mak install", but it installs nothing into |
| 390 |
/usr/local/. How I can install headers into /usr/local/include and |
| 391 |
libs into /usr/local/lib? |
| 392 |
|
| 393 |
A4.1 Installation in any system-wide place is issue of either 'package builder' |
| 394 |
or system administrator. He/she should be familiar with building package |
| 395 |
procedure and/or understand where headers and libraries should be situated. |
| 396 |
The place choice not issue of STLport. |
| 397 |
|
| 398 |
You can just use |
| 399 |
|
| 400 |
(cd ${STLPORT_SRC}/lib; tar cf - . ) | (cd ${TARGET_LIB_DIR}; tar xf - ); \ |
| 401 |
(cd ${STLPORT_SRC}; tar cf - stlport) | (cd ${TARGET_INCLUDE_DIR}; tar xf - ) |
| 402 |
|
| 403 |
Sometimes we will think about 'make install', but not now. |
| 404 |
|
| 405 |
|
| 406 |
======================================================================== |
| 407 |
|
| 408 |
Q5.0 I found a bug, how I can report about it? |
| 409 |
|
| 410 |
A5.0 |
| 411 |
0. Ensure that this is really a bug (standard violation, incorrect |
| 412 |
behaviour with correct usage). |
| 413 |
1. Ensure that bug is in STLport, not in your code (you can use _STLP_DEBUG |
| 414 |
for that, see stlport/stl/config/user_config.h). |
| 415 |
2. Ensure that you correctly built STLport---build and run unit tests |
| 416 |
(build/test/unit) first with default settings, then with your settings |
| 417 |
(if you changed any). |
| 418 |
3. Write a short test that demonstrates the bug. |
| 419 |
4. Make sure that this test case is really new, i.e. not covered by unit |
| 420 |
tests (test/unit/*). |
| 421 |
5. Compare your results with reported runs of unit tests (build/test/unit/STATUS). |
| 422 |
6. Write bug description and test here |
| 423 |
|
| 424 |
https://sourceforge.net/projects/stlport |
| 425 |
|
| 426 |
DON'T FORGET TO DESCRIBE: |
| 427 |
|
| 428 |
- OPERATIONAL ENVIRONMENT |
| 429 |
- COMPILER VERSION |
| 430 |
- STLPORT VERSION |
| 431 |
- RESULT OF UNIT TESTS |
| 432 |
|
| 433 |
Keep in mind, that your bug MUST be reproduced by other people, so give |
| 434 |
enough information (but compactly, give only essential information). |
| 435 |
|
| 436 |
======================================================================== |
| 437 |
|
| 438 |
Q6.0 In STLport files like locale.h, setjmp.h, stdlib.h, etc., do |
| 439 |
nothing except include native headers. Why are these files present in STLport? |
| 440 |
|
| 441 |
A6.0 Sometimes native C headers are using C++ ones or are refering |
| 442 |
to the std namespace. That's why, if stddef was absent in STLport, then |
| 443 |
|
| 444 |
#include <string> |
| 445 |
#include <stddef.h> |
| 446 |
|
| 447 |
may cause problem in following code, because std redefined in the end of |
| 448 |
<string> header, and std may be used in stddef.h: |
| 449 |
|
| 450 |
__BEGIN_NAMESPACE_STD |
| 451 |
.... |
| 452 |
__END_NAMESPACE_STD |
| 453 |
|
| 454 |
where __BEGIN_NAMESPACE_STD is defined as 'namespace std {'. |
| 455 |
To avoid this, STLport has stddef.h header and provide correct masquerade |
| 456 |
for std. |
| 457 |
|
| 458 |
======================================================================== |
| 459 |
|
| 460 |
Q6.1 Is STLport a replacement for headers and libraries that shipout |
| 461 |
with compiler? |
| 462 |
|
| 463 |
A6.1 In general no. In any case C++ language support from compiler is required |
| 464 |
for STLport (operators new, delete, RTTI, exceptions support). STLport also |
| 465 |
uses 'native' headers and libraries to take interface to system functions and |
| 466 |
variables. |
| 467 |
|
| 468 |
======================================================================== |
| 469 |
|
| 470 |
Q6.2 My tool detects memory leaks in application with STLport. Is this leak |
| 471 |
from STLport? |
| 472 |
|
| 473 |
A6.2 In most cases these are 'pseudo memory leaks' that some tools |
| 474 |
wrongly detect. |
| 475 |
|
| 476 |
In the default compile of STLport, the node allocator is used to allocate |
| 477 |
internal memory. The node allocator works by pre-allocating a large chunk of |
| 478 |
memory and handing out small memory blocks. The memory chunk is not freed |
| 479 |
during running an application that uses STLport (i.e. it is not returned to |
| 480 |
the system, but reused inside application). |
| 481 |
See also http://www.sgi.com/tech/stl/alloc.html |
| 482 |
|
| 483 |
There are tools like BoundsChecker, Purify or Valgrind that check for memory |
| 484 |
leaks, for memory that isn't freed when no longer used. These tools may report |
| 485 |
false memory leaks when one uses STLport's node allocator. The memory chunk is |
| 486 |
normally freed at application end, but the memory checkers usually report memory |
| 487 |
leaks before that point. Another memory problem might be reported when you use |
| 488 |
shared libraries (e.g. DLL, this problem specific for Windows DLL model) that |
| 489 |
uses STLport internally and are statically link to it. If memory is allocated in |
| 490 |
a dll and released in an other then the STLport node allocator will keep the |
| 491 |
released memory for a future use. If you do not use this memory then your |
| 492 |
application global memory consumption will grow until the app crash even if there |
| 493 |
is no real memory leak. This is why you should always use a coherent configuration |
| 494 |
everything in dll or everything in static lib. |
| 495 |
|
| 496 |
There are ways to remove the pseudo memory leaks (since the memory is properly |
| 497 |
freed at the end of the program, the leaks are just pseudo-ones). You could use |
| 498 |
another allocator that is used in STLport. Open the file |
| 499 |
"./stlport/stl/config/host.h" and uncomment either one of the following: |
| 500 |
|
| 501 |
|
| 502 |
_STLP_USE_NEWALLOC enables a simple allocator that uses "new/delete" |
| 503 |
_STLP_USE_MALLOC enables a simple allocator that uses "malloc/free" |
| 504 |
|
| 505 |
The new/delete allocator has the advantage of giving an entry point to track |
| 506 |
memory starvation, see set_new_handler in your compiler doc or the C++ Standard |
| 507 |
for more information. |
| 508 |
|
| 509 |
Alternatively you can define the following symbol, just uncomment it in |
| 510 |
"./stlport/stl/config/host.h". |
| 511 |
|
| 512 |
_STLP_LEAKS_PEDANTIC |
| 513 |
|
| 514 |
The symbol forces freeing all memory chunks. Also see the comments around the |
| 515 |
symbol in the config file. |
| 516 |
|
| 517 |
Note that you have to recompile STLport AND your application and all of your |
| 518 |
dependent libraries if you make any change to the file! |
| 519 |
|
| 520 |
There are also some defines that help in debugging memory problems in STLport. |
| 521 |
In _STLP_DEBUG mode, just also define the following symbols, either in |
| 522 |
"./stlport/stl/config/user_config.h" or in your project settings: |
| 523 |
|
| 524 |
_STLP_DEBUG_ALLOC |
| 525 |
_STLP_DEBUG_UNINITIALIZED |
| 526 |
|
| 527 |
You don't need to rebuild STLport for these options, but you have to rebuild |
| 528 |
your application and all of your dependent libraries if you make any change to |
| 529 |
the file. |
| 530 |
|
| 531 |
======================================================================== |
| 532 |
|
| 533 |
Q6.3 When running unit tests, I have errors in LocaleTest test fixture, how bad |
| 534 |
is it? |
| 535 |
|
| 536 |
A6.3 Failures in LocaleTest tests do not mean that your platform/compiler is not |
| 537 |
fully supported by STLport. Platform independant localization tests are very hard |
| 538 |
to write as Standard localization API has not been design to make unit test easy. |
| 539 |
In STLport unit tests suite we have hard coded some expected values. Those values |
| 540 |
depends on your OS configuration explaining why sometimes the tests are failing. |
| 541 |
|
| 542 |
======================================================================== |
| 543 |
|
| 544 |
Q6.4 set or multiset iterators are immutable like const_iterators, why ? |
| 545 |
|
| 546 |
A6.4 With set or multiset associative containers or even newly introduced |
| 547 |
tr1::unordered_set and tr1::unordered_multiset key is confuse with data. It |
| 548 |
means that modifying the data is also modifying the key. Modifying the key |
| 549 |
might corrupt the container internal data structure so STLport prefer to |
| 550 |
make this problem obvious and only return a const access to the key with |
| 551 |
immutable iterators. Your solutions are: |
| 552 |
- prefer map/multimap and split the key and the data |
| 553 |
- use const_cast when you want to change a set/multiset element. |