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