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 ~ [email protected] ~ http://www.livecode.com/ LiveCode: Everyone can create apps _______________________________________________ use-livecode mailing list [email protected] Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode
