libstdc++/3904: STL does not use ::operator new as required in standard
Tue Jul 31 12:26:00 GMT 2001

>Number:         3904
>Category:       libstdc++
>Synopsis:       STL does not use ::operator new as required in standard
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 31 12:26:00 PDT 2001
>Originator:     Matti Rintala
>Release:        3.0
System: Linux 2.4.5 #1 Tue May 29 19:53:48 EEST 2001 i686 unknown
Architecture: i686

host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc-3.0/configure --host=athlon-pc-linux-gnu --prefix=/usr/local/gcc-3.0 --enable-shared --enable-threads --with-cpu=athlon --enable-cpp
	ISO C++ standard states that by default STL containers use
	std::allocator to obtain memory. std::allocator in turn is required to
	use ::operator new and ::operator delete. However, STL in GCC
	specifically detects the use of std::allocator and uses malloc() in
	this case (this behaviour comes from the SGI STL code base). This
	breaks programs which override the default ::operator new and
	::operator delete.

	I understand the need for customised dynamic memory handling
	(which its own free memory lists etc) in STL,
	because it increases performance. However, even these kinds of
	optimisations should use ::operator new instead of malloc() so that
	they don't break the standard.

More information about the Gcc-bugs mailing list