Re: [eigen] Checking for integer overflow in size computations |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
On 16.10.2011 22:21, Benoit Jacob wrote:
Note that there is a small performance overhead associated with that.
I tried to minimize it, but there is still 1 integer division in the
size=rows*cols overflow check. I hope that's still negligible compared
to the cost of malloc.
I have not looked into your patch yet, but wouldn't a multiplication in
int64/int128 also do the job? I guess that would be much cheaper than a
division. Anyways I would agree that the overhead should be negligible.
If someone really cares for that overhead, we might introduce a flag
such as EIGEN_DONT_CHECK_INTEGER_OVERFLOW.
Like the standard behavior of operator new and of our own aligned_new
routines, these checks throw std::bad_alloc on error and don't do
anything else. In particular, we still don't guarantee that
aligned_new returns null on error. It feels weird to me to rely
entirely on exceptions to report these errors, but this is how c++
works (as long as one doesn't use nothrow-new) and what we've been
doing. Is this OK?
I don't want to start a philosophical discussion about exceptions vs
return-type checking, but honestly I guess that the C++ way is much more
reliable, since about 99% of malloc users hardly ever check for NULL
pointers ("Come on, how likely is it that I can't get ** MB?").
Furthermore, I guess hardly anyone disables exceptions in C++, unless he
really knows what he's doing.
Christoph
--
----------------------------------------------
Dipl.-Inf. Christoph Hertzberg
Cartesium 0.051
Universität Bremen
Enrique-Schmidt-Straße 5
28359 Bremen
Tel: (+49) 421-218-64252
----------------------------------------------