Author njs
Recipients josh.r, jtaylor, neologix, njs, pitrou, skrah, vstinner
Date 2014-04-27.16:39:09
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1398616750.43.0.230171095582.issue21233@psf.upfronthosting.co.za>
In-reply-to
Content
@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...
History
Date User Action Args
2014-04-27 16:39:10njssetrecipients: + njs, pitrou, vstinner, skrah, neologix, jtaylor, josh.r
2014-04-27 16:39:10njssetmessageid: <1398616750.43.0.230171095582.issue21233@psf.upfronthosting.co.za>
2014-04-27 16:39:10njslinkissue21233 messages
2014-04-27 16:39:09njscreate