Martin v. Löwis added the comment:

> Why is that permissible but _PyLong_IS_SMALL_INT is not?

It's *permissable* primarily because it is there. There are many places in 
Python which invoke undefined behavior already (most notably wrt. signed 
integers); we should strive to eliminate them.

OTOH, obmalloc clearly makes a lot of assumptions on the hardware architecture 
(including the assumption that there is page-based virtual memory, etc). It's a 
memory allocator, that gives permission to make such assumptions. If it turns 
out that they break on some system, obmalloc cannot be used there - hence usage 
of obmalloc is still a compile-time option.

In addition, for the specific macros: it's easy to see that a compiler may 
optimize _PyLong_IS_SMALL_INT as true by simple static analysis. For 
Py_ADDRESS_IN_RANGE, the same static analysis is not possible, since the memory 
doesn't come from a declared array. It would require whole-program analysis to 
determine that .address always points to a memory block with ARENA_SIZE bytes. 
If a compiler manages to figure it out, obmalloc cannot be used on that system 
(and if that happens, I'll recommend to drop or revise obmalloc altogether, 
perhaps in favor of a system pool allocator).

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue10044>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to