hasMemory

Mark Waddingham mark at livecode.com
Fri Jun 10 05:21:23 EDT 2016


On 2016-06-10 10:05, Mark Waddingham wrote:
> P.S. The 'hasMemory' function in LiveCode actually does the best it
> can do - it sees if it can allocate a contiguous block of memory of
> the size that has been requested (using malloc) and if that succeeds,
> it frees the block and returns true. This should mean that (assuming
> nothing on the system suddenly consumes all physical and virtual ram)
> you should be able to do an action which requires that amount of
> memory immediately after:
> 
> void MCLegacyEvalHasMemory(MCExecContext& ctxt, uinteger_t p_bytes,
> bool& r_bool)
> {
>   char *t_buffer = nil;
>   r_bool = nil != (t_buffer = (char*)malloc(p_bytes));
>   free(t_buffer);
> }

As an addendum, Fraser just reminded that even this is entirely useless 
on Linux.

When you request more memory to a process on Linux, the kernel will 
happily grant *all* requests which will fit in the address space - it 
allocates pages (whether they be physical or virtual) *lazily*. So you 
can quite happily do malloc(2^46) and it will succeed... You'll just get 
a SEGV at some point later when there are no pages anywhere left. (Linux 
has an overcommit policy - i.e. it does not use the number of possibly 
available pages to determine how much address space it will give each 
process).

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps





More information about the use-livecode mailing list