thanks Steve

> On Jul 4, 2016, at 10:40 PM, Steve Sisak <sgs-li...@codewell.com> wrote:
> 
> It sounds like you should be keeping track of the space available on the VM 
> swap drive if you want to preflight at that level.
> 
> It should be obvious why the OS doesn’t — it could even change after the 
> allocation.
> 
> Also, if your use of the buffer was sufficiently sparse, you could use it.
> 
> Perhaps a task that gets free disk space periodically, but there are no 
> guarantees.
> 
> You may be able to install an exception handler for the error and catch it, 
> but you’re way out on the ragged edge here.
> 
> Best,
> 
> -Steve
> 
>> On Jul 4, 2016, at 10:11 PM, Dmitry Markman <dmark...@mac.com 
>> <mailto:dmark...@mac.com>> wrote:
>> 
>> Hi Jens
>> 
>> I think your explanation makes sense, thank you very much
>> 
>> I’m asking for 0x1000000000000 or 281474976710656B which is ~250TB on my 
>> MacBook Pro with 1TB SSD and 16GB RAM and for release build it doesn’t 
>> return NULL
>> 
>> in our case, customer is trying to build huge simulink model and we’d like 
>> to error out at the very early stage (allocation)
>> 
>> and notify customer that it’s not possible to create such a model.
>> 
>> and in our real case we trying to allocate about 10 chunks of memory 200GB 
>> each, so it’s far less than in my example
>> 
>> thanks again
>> 
>> 
>>> On Jul 4, 2016, at 9:35 PM, Jens Alfke <j...@mooseyard.com 
>>> <mailto:j...@mooseyard.com>> wrote:
>>> 
>>> I think there are two different things going on.
>>> 
>>> (1) In your contrived example, the malloc/free calls are optimized away 
>>> entirely by the compiler. First the compiler optimizes away the “data != 
>>> NULL” test, replacing it with “true” on the assumption malloc can’t fail; 
>>> then it sees that there are no remaining uses of “data” so it optimizes out 
>>> the malloc and free calls.
>>> 
>>> I think you’ve found an edge case here — in general malloc will not return 
>>> NULL whether or not it can supply that much memory (see below), however it 
>>> appears that given a sufficiently ridiculous size (you asked for something 
>>> like 150 terabytes!) it _will_ return NULL. I don’t know how “sufficiently 
>>> ridiculous” is determined; maybe there’s a hardcoded limit?
>>>     I am not a compiler engineer, but my guess is that optimizing away 
>>> mallocs is sufficiently useful in real code that they’ve decided to ignore 
>>> the edge case where someone passes a ridiculously large size.
>>> 
>>> (2) In your real code, which you said crashes, what’s probably going on is 
>>> that malloc is overcommitting — it allocates as much address space as you 
>>> asked for, but doesn’t map it to any actual RAM or backing store. Then as 
>>> the address space is used, the page faults trigger allocation of actual RAM 
>>> and backing storage, probably by growing the swap file. At some point it 
>>> becomes unable to allocate (probably because the boot disk filled up?), and 
>>> the page-fault fails with a segfault.
>>> 
>>> Operating systems behave differently with regard to overcommitting. I’m not 
>>> very familiar with Linux and almost totally unfamiliar with Windows. My 
>>> understanding is that Linux has some kind of “OOM Killer” process that will 
>>> kill any process that’s using too much memory; presumably this happens 
>>> before that process would run out of allocatable space. At the other 
>>> extreme, iOS doesn’t use swap space at all and will kill a process that 
>>> tries to use too much of physical RAM.
>>> 
>>> I don’t know what the best way is to ask for huge amounts of address space 
>>> such that it’s all pre-mapped and can all safely be used without 
>>> segfaulting. There may be an option to vm_allocate that does this. (Calling 
>>> calloc won’t help; for large allocations that fall through to vm_allocate, 
>>> calloc and malloc are equivalent.) You may want to ask on the 
>>> darwin_userlevel or darwin_dev mailing lists.
>>> 
>>> —Jens
>> 
>> Dmitry Markman
>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Xcode-users mailing list      (Xcode-users@lists.apple.com 
>> <mailto:Xcode-users@lists.apple.com>)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/xcode-users/sgs-lists%40codewell.com 
>> <https://lists.apple.com/mailman/options/xcode-users/sgs-lists%40codewell.com>
>> 
>> This email sent to sgs-li...@codewell.com <mailto:sgs-li...@codewell.com>

Dmitry Markman

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      (Xcode-users@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/xcode-users/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to