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 ~ m...@livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to