Nathaniel Smith added the comment:

@Charles-François: I think your worries about calloc and overcommit are 
unjustified. First, calloc and malloc+memset actually behave the same way here 
-- with a large allocation and overcommit enabled, malloc and calloc will both 
go ahead and return the large allocation, and then the actual out-of-memory 
(OOM) event won't occur until the memory is accessed. In the malloc+memset case 
this access will occur immediately after the malloc, during the memset -- but 
this is still too late for us to detect the malloc failure. Second, OOM does 
not cause segfaults on any system I know. On Linux it wakes up the OOM killer, 
which shoots some random (possibly guilty) process in the head. The actual 
program which triggered the OOM is quite likely to escape unscathed. In 
practice, the *only* cases where you can get a MemoryError on modern systems 
are (a) if the user has turned overcommit off, (b) you're on a tiny embedded 
system that doesn't have overcommit, (c) if you run out of virtual address 
space. None of these cases are affected by the differences between malloc and 
calloc.

Regarding the calloc API: it's a wart, but it seems like a pretty unavoidable 
wart at this point, and the API compatibility argument is strong. I think we 
should just keep the two argument form and live with it...

----------

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

Reply via email to